简介
I 语言基础
1
基本使用
1.1
介绍
1.1.1
学习资源
1.2
Julia软件安装
1.2.1
Julia命令行程序的安装和使用
1.2.2
安装Anaconda3软件
1.2.3
Jupyter笔记本软件的安装和使用
1.2.4
安装设置Visual Studio Code的Julia语言集成编辑环境
1.2.5
安装设置Atom+Juno集成编辑环境
1.2.6
Pluto笔记本安装使用
1.2.7
关于JuliaPro套装
1.3
扩展包
1.4
Julia的基本数据和相应运算
1.4.1
整数与浮点数
1.4.2
四则运算
1.4.3
整数的四则运算
1.4.4
数学函数
1.4.5
字符串
1.4.6
符号(Symbol)
1.4.7
枚举类别
1.5
变量与赋值
1.6
比较和逻辑运算
1.6.1
比较运算
1.6.2
逻辑运算
1.7
简单的输出
1.8
程序控制结构
1.8.1
注释
1.8.2
复合表达式
1.8.3
短路与运算以及分支结构
1.8.4
短路或运算以及分支结构
1.8.5
if–end结构
1.8.6
if–else–end结构
1.8.7
if-elseif-else-end结构
1.8.8
三元运算符
1.8.9
for循环
1.8.10
两重for循环
1.8.11
while循环
1.8.12
直到型循环与break语句
1.8.13
continue语句
1.8.14
goto命令
1.9
自定义函数初步
1.9.1
自定义函数的单行格式
1.9.2
自定义函数的多行格式
1.9.3
可选参数(Optional argument)和关键词参数(Keyword arguments)
1.9.4
返回值
2
复合数据结构
2.1
一维数组
2.1.1
向量下标
2.1.2
数组类型
2.1.3
向量初始化
2.1.4
变量与值
2.1.5
向量的有关函数
2.1.6
广播
2.2
元组(Tuple)
2.2.1
概念和生成
2.2.2
访问片段
2.2.3
比较
2.2.4
赋值等号左边的元组
2.2.5
用元组在函数中返回多个值
2.2.6
元组转换为一维数组
2.2.7
两个向量成对使用
2.3
有名元组
2.4
字典
2.4.1
生成字典
2.4.2
对(Pair)
2.4.3
访问元素
2.4.4
遍历字典
2.4.5
用生成器生成字典
2.4.6
字典应用:频数表
2.5
集合类型
2.6
自定义复合数据类型
3
函数进阶
3.1
参数传递模式
3.2
无名函数
3.3
链式调用与函数复合
3.3.1
示例:图像点阵下标与xy坐标转换
3.4
可变个数参数与元组实参
3.5
递归调用
3.6
闭包
3.7
函数式编程
3.7.1
map
3.7.2
filter
3.7.3
reduce
3.7.4
accumulate
3.8
异常处理
4
复合数据类型进阶
4.1
一维数组
4.1.1
向量下标
4.1.2
数组类型
4.1.3
向量初始化
4.1.4
向量与标量的运算
4.1.5
向量与向量的四则运算
4.1.6
向量的比较运算
4.1.7
向量的循环遍历
4.1.8
列表推导(Comprehension)
4.1.9
向量化运算
4.1.10
向量的输出
4.1.11
向量的输入
4.1.12
向量的绑定
4.1.13
向量的计算用函数
4.1.14
排序
4.1.15
向量化函数
4.2
矩阵
4.2.1
矩阵下标
4.2.2
矩阵初始化
4.2.3
矩阵合并
4.2.4
矩阵元素遍历
4.2.5
矩阵读写
4.2.6
矩阵与标量的四则运算
4.2.7
两个矩阵之间的四则运算
4.2.8
矩阵的广播运算
4.2.9
对每行或每列的操作
4.2.10
矩阵乘法
4.2.11
矩阵转置和旋转
4.2.12
矩阵求逆和解线性方程组
4.2.13
其它线性代数功能
4.2.14
下标位移数组
4.2.15
特殊矩阵
4.3
数组
4.3.1
初始化
4.3.2
数组的基本函数
4.3.3
数组的广播
4.3.4
合并
4.3.5
数组函数
4.3.6
排列组合
4.4
静态数组
4.5
生成器
4.5.1
生成向量
4.5.2
用生成器生成矩阵
4.5.3
用生成器生成字典
4.6
收集容器类的数据结构
4.6.1
迭代器
4.6.2
范围类型
4.6.3
一般收集容器的接口
4.6.4
支持迭代器的收集容器接口
4.6.5
关于迭代器的方便函数
4.6.6
支持下标运算的收集容器接口
4.6.7
AbstractArray的接口
4.6.8
字典的接口
4.6.9
集合的接口
4.7
map-reduce等函数式编程
4.7.1
map
4.7.2
reduce
4.7.3
accumulate
4.7.4
mapreduce
4.7.5
filter
4.7.6
replace
4.7.7
findfirst
5
字符串
5.1
字符
5.2
字符串下标与遍历
5.3
字符串是不可变类型
5.4
读写字符串
5.5
字符串函数
5.6
字符串比较
5.7
字符串插值
5.8
转换为字符串
5.9
格式化转换
5.10
正则表达式
6
文件
6.1
文本文件读写
6.2
文件和目录信息
7
模块
8
作用域
8.1
句法作用域
8.2
全局作用域
8.3
局部作用域
8.3.1
例1
8.3.2
例2
8.3.3
例3
8.3.4
例4
8.3.5
例5
8.4
软局部作用域
8.4.1
例6
8.5
硬局部作用域
8.5.1
例7
8.6
嵌套定义函数的作用域
8.6.1
例8
8.6.2
例9:运行次数计数
8.7
let结构
8.8
硬作用域和软作用域的比较
9
类型系统
9.1
常用类型
9.2
类型语法
9.3
类型系统
9.4
复数类型
9.5
有理数类型
9.6
缺失值
9.7
类型转换与提升
9.8
类型声明
9.8.1
类型验证
9.8.2
类型声明
9.9
抽象类型
9.10
初等类型
9.11
复合类型
9.11.1
语法
9.11.2
自定义复合类型示例
9.12
参数化类型
9.12.1
自定义多项式类型
9.13
Julia类型系统的缺点
9.14
DataStructure库
10
泛型编程和其它内容
10.1
方法
10.1.1
泛型编程
10.1.2
多重派发
10.1.3
模仿类型
10.1.4
接口和实现
10.2
宏
10.2.1
接口
II 统计数据分析和统计学习
11
数据框
11.1
统计数据分析
11.2
数据框
11.3
数据框生成
11.4
数据框信息
11.5
访问数据框内容
11.5.1
访问单个元素
11.5.2
访问一列
11.5.3
用select选列子集
11.5.4
访问行子集
11.5.5
访问行列子集
11.5.6
添加列
11.5.7
添加行
11.6
CSV文件读写
11.6.1
读入
11.6.2
选项
11.6.3
从网络读入
11.6.4
写出
11.7
Excel文件读写
11.8
数据框变量概括
11.8.1
describe
函数
11.8.2
直接调用统计函数
11.8.3
combine
函数
11.9
简单修改
11.9.1
修改变量名
11.9.2
修改或添加变量
11.9.3
用
transform!
修改列
11.9.4
修改多列
11.9.5
替换值
11.10
排序
11.11
纵向合并
11.12
横向合并
11.12.1
一对一横向合并
11.12.2
一对多横向合并
11.12.3
多对多横向合并
11.12.4
连接
11.13
长宽表转换
11.13.1
stack
和
unstack
11.13.2
转换实例
11.13.3
总结
11.14
缺失值管理
11.15
分类变量
11.15.1
介绍
11.15.2
生成
11.15.3
水平值
11.15.4
转换
11.15.5
频数统计
11.16
日期和时间类型
11.16.1
日期
11.16.2
日期时间
11.16.3
提取成分
11.16.4
日期运算
11.16.5
日期序列
11.17
使用DataFramesMeta包
11.17.1
查询、排序、计算新变量
11.17.2
用
@combine
汇总计算
11.17.3
用
groupby
和
@combine
汇总计算
11.18
用Query包进行查询
11.19
分组汇总
11.20
数据框的其它功能
12
Makie包作图
12.1
Makie包
12.1.1
Makie后端
12.1.2
安装和运行
12.1.3
样例数据
12.2
简单一次性完成的图形
12.2.1
折线图
12.2.2
散点图
12.2.3
散点折线图
12.2.4
直方图
12.2.5
密度估计曲线图
12.2.6
盒形图
12.2.7
正态QQ图
12.2.8
经验分布函数图
12.2.9
时间序列图
12.2.10
曲面的等高线图
12.2.11
曲面的染色等高线图
12.2.12
曲面的热力图
12.2.13
频数条形图
12.2.14
小结
12.3
Makie重要概念和作图步骤
12.3.1
画布
12.3.2
添加坐标轴
12.3.3
添加图形内容及颜色设置
12.3.4
多个图层
12.3.5
一次性完成作图
12.3.6
显示和保存
12.4
Makie作图定制
12.4.1
作图函数的一般语法规则
12.4.2
在作图函数中设置画布和坐标系统属性
12.4.3
绘图对象属性
12.4.4
主题
12.4.5
坐标轴设置
12.4.6
内部图例
12.4.7
简单布局
12.4.8
外部图例
12.4.9
颜色代码条
12.4.10
使用LaTeX公式
12.5
GridLayout与嵌套布局
12.5.1
实例
12.5.2
大小调整
12.5.3
间隙
12.5.4
使用突出部分
12.5.5
对齐
12.6
各种图形函数参考
12.6.1
scatter
12.6.2
lines
12.6.3
heatmap
12.7
AlgebraOfGraphics包
12.7.1
简单演示
12.7.2
保存为图像文件
12.7.3
data
函数
12.7.4
mapping
函数
12.7.5
visual
函数
12.7.6
小图
12.7.7
分析
12.7.8
代数运算
12.7.9
用
draw
绘制图形
12.7.10
使用LaTeX标签
12.7.11
Algebra与Makie的配合使用
12.8
AlgebraOfGraphics更多范例
12.8.1
散点图和折线图
12.8.2
盒形图等
12.8.3
对数轴
12.8.4
多个变量同时作图
12.9
GLMakie
12.9.1
交互能力
12.9.2
三维散点图、折线图
12.9.3
三维曲面的各种图形
13
基本统计功能
13.1
Julia中与统计有关的库
13.2
描述统计
13.2.1
描述统计函数来源
13.2.2
矩统计量
13.2.3
分位数和秩统计量
13.2.4
频数统计
13.2.5
相关系数
13.2.6
加权
13.2.7
距离
13.2.8
StatsBase中其它函数
13.3
分布
13.3.1
介绍
13.3.2
与分布有关的函数
13.3.3
支持的分布
13.3.4
混合分布
13.3.5
分布卷积
13.3.6
分布拟合
13.4
置信区间和假设检验
13.4.1
单正态总体方差已知时均值的Z检验
13.4.2
单正态总体均值的t检验
13.4.3
单个比例的假设检验
13.4.4
独立两组均值比较
13.5
与R软件交互
13.5.1
从Julia中访问R数据框
13.5.2
从Julia中调用R程序
13.6
线性回归
14
统计学习介绍
14.1
Julia中与机器学习有关的库
14.2
概率建模与推断介绍
14.2.1
概念
14.2.2
Gen库
14.2.3
计算方法
14.3
有监督学习
14.3.1
误差指标
14.3.2
训练集和测试集
14.3.3
交叉验证
14.4
k近邻判别法
14.5
判别回归树(CART)
14.5.1
方法介绍
14.5.2
例子
14.6
自助法(bootstrap)
14.7
随机森林
14.8
梯度提升(gradient boosting)
14.8.1
XGBoost处理分类问题的交叉验证函数
14.8.2
对啤酒数据分析的示例程序
14.8.3
XGBoost处理回归问题的交叉验证函数
14.8.4
处理食品评分数据的示例程序
14.9
无监督学习
14.10
主成分分析(PCA)
14.11
概率主成分分析(PPCA)
14.11.1
模型
14.11.2
EM算法
14.11.3
PPCA的Julia实现
14.12
k均值聚类
14.13
混合概率主成分分析(MPPCA)模型
14.13.1
模型
14.13.2
参数估计
15
统计计算
15.1
介绍
15.2
向量和矩阵
15.2.1
向量和矩阵计算
15.2.2
向量化与循环
15.3
高精度浮点数和整数
15.4
计算函数
15.4.1
排列组合
15.4.2
特殊函数
15.5
随机数发生器
15.5.1
标准库的随机数
15.5.2
Distributions库提供的随机数发生器
15.5.3
随机抽样
15.5.4
随机排列
15.5.5
非均匀分布随机数生成
15.6
最优化与方程求根
15.6.1
Optim包
15.6.2
JuMP包
15.6.3
一元方程求根的Roots包
15.6.4
方程求根的NLSolve包
15.7
自动微分
15.7.1
介绍
15.7.2
示例
15.7.3
符号计算
15.8
微分方程求解
15.8.1
使用步骤
15.8.2
联立常微分方程求解
16
随机模拟
16.1
介绍
16.2
随机模拟计算定积分
16.2.1
平均值法
16.2.2
重要抽样法
16.3
随机向量抽样
16.3.1
条件分布法
16.3.2
变换法
16.4
泊松过程抽样
16.5
高斯过程模拟
16.5.1
布朗运动模拟
16.5.2
采样点较少情形
16.5.3
平稳高斯列
16.6
置换检验
17
离散事件模拟SimJulia
17.1
SimJulia介绍
17.2
基本使用范例
17.2.1
最小的例子
17.2.2
反复激活一种事件的例子
17.2.3
等待随机长度的例子
17.2.4
同一个过程函数激活不同事件的例子
17.2.5
两个实例简单交替激活的例子
17.2.6
等待另一过程的例子
17.2.7
中断另一过程运行的例子
17.2.8
排队等待某一资源的例子
17.2.9
依赖于多个事件的例子
17.2.10
Container资源例子
17.2.11
Store类型
17.3
模拟运行
17.4
数据收集和统计分析
17.5
示例:M/M/c服务系统模拟
17.5.1
有限顾客版本
17.5.2
无限顾客的版本
17.6
示例:洗车房模拟
17.7
示例:加油站模拟
17.8
示例:带有信道延迟的信号发送接收
17.9
示例:一对多广播发信的模拟
17.10
示例:排队超过耐心模拟
17.11
示例:n取k冗余系统可靠性模拟研究
17.12
示例:剧院购票模拟
18
Julia程序效率介绍
18.1
Julia的语言特点
18.2
程序性能评测
18.2.1
程序计时
18.2.2
程序瓶颈查找(profiler)
18.2.3
BenchmarkTools
18.3
数据类型与运行效率
18.3.1
类型声明
18.3.2
多重派发
18.3.3
类型稳定性
18.4
函数的效率
18.4.1
全局变量的问题
18.4.2
行内函数(inline functions)
18.4.3
用宏提高效率
18.4.4
关键字参数问题
18.5
基本计算
18.5.1
整数的表示与溢出
18.5.2
浮点数
18.6
数组处理
18.6.1
数组存储
18.6.2
减少动态内存分配
18.6.3
用数组视图代替数组切片
18.6.4
SIMD并行优化
18.6.5
数组遍历
18.7
并行计算
18.7.1
并行for循环和独立随机模拟
18.7.2
并行
pmap()
和互相不影响的计算
18.7.3
所有节点需要的包和函数
18.7.4
共享数组
18.7.5
比例的置信区间模拟研究并行计算示例
18.7.6
多只股票投资策略实证分析
18.8
亚式期权计算例子
19
Julia统计图形–Plots库
19.1
介绍
19.2
折线图
19.3
数据框中数据绘图
19.4
图形输出
19.5
散点图
19.6
子图
19.7
属性
19.8
修改图形
19.9
绘图类型
19.10
条形图
19.11
直方图
19.12
盒形图
19.13
三维曲面图
19.14
二维直方图
19.15
参数函数曲线
19.16
K线图
19.17
标注
19.18
动画图
20
Julia统计图形—Gadfly
20.1
介绍
20.2
条形图
20.3
盒形图(Boxplots)
20.4
散点图
20.5
折线图
20.6
函数曲线
III 应用例子
21
Julia编程示例–科学计算问题
21.1
用迭代计算平方根
21.2
圆周率
21.2.1
割圆术
21.2.2
用有理数近似π
21.2.3
用级数计算π
21.3
卷积
21.3.1
离散卷积
21.3.2
有限离散卷积
21.4
滤波与推移算子
21.4.1
下标非有限情形
21.4.2
下标有限情形
21.5
卷积与圆周率割圆法改进
21.5.1
推导
21.5.2
递归方法
21.5.3
利用多次卷积
21.5.4
利用卷积结合律
21.6
一维卷积在图像处理中应用
21.7
二维卷积在图像处理中应用
22
Julia编程示例–自然数处理
22.1
从整数值拆分各个数字
22.2
素因子分解
22.3
最大公因数和最小公倍数
22.4
求素数表
22.4.1
用逐个试验能否除尽的方法
22.4.2
筛法求素数表
22.5
水仙花数和兰德尔数
22.6
勾股数
22.7
角谷猜想
23
Julia编程示例–递归趣例
23.1
汉诺塔问题
23.2
高斯八皇后问题
23.2.1
穷举法
23.2.2
递归算法
23.2.3
找到变换等价的摆法
24
Julia编程示例–单词和文本
24.1
词典中单词的练习
24.1.1
二分法查词
24.1.2
查找良序词
24.1.3
查找回文词
24.1.4
找出多次成对字母的单词
24.1.5
查找变位词
24.1.6
查找反向成对单词
24.1.7
连锁组词
24.1.8
拆字词
24.2
千字文没有重复吗
24.3
查找重复诗文
24.3.1
问题
24.3.2
Julia字符串知识
24.3.3
程序分解
24.3.4
程序列表
24.3.5
用正则表达式解决问题
24.3.6
改进思路
24.4
用字典类型作频数计数
24.4.1
频率计数
24.4.2
反向映射
24.4.3
频数表的排序输出
24.4.4
一篇英文作品的词频分析
24.5
用马氏链方法生成随机句子
24.5.1
问题和步骤
24.5.2
读入文章拆分句子
24.5.3
估计概率
24.5.4
生成随机句子
24.5.5
测试已有程序
24.5.6
制作模块和闭包
25
Julia编程示例–动态规划
25.1
Fibonacci数列
25.2
最优打包方案
25.3
最小能量路径
25.3.1
问题
25.3.2
穷举法
25.3.3
递归解法
25.3.4
动态规划方法
25.3.5
使用自定义的迭代器
26
概率统计应用
26.1
概率论例子
26.1.1
取帽子问题
26.1.2
可重复分组问题
26.1.3
多人博弈连续胜出问题
26.2
统计学例子
26.2.1
威布尔参数估计
26.2.2
三角形分布参数矩估计
26.2.3
伽马分布参数估计
26.2.4
二项分布参数三次方无偏估计
26.2.5
Satterthwaite两样本t检验统计量分布研究
27
草稿
参考文献
Julia语言入门
参考文献
Kochenderfer, Tim A., Mykel J. and Wheeler. 2019.
Algorithms for Optimization
. MIT Press.
https://algorithmsbook.com/optimization/
.