参考:
https://cosx.org/2015/06/generating-normal-distr-variates/
https://heliosphan.org/zigguratalgorithm/zigguratalgorithm.html
利用中心极限定理生成正态分布
样本足够大时,样本均值的分布收敛到正态分布。
生成100000个[0,1)随机数,每100个一组取平均值,得到1000个平均值,服从正态分布。
效率太低了,只能玩一玩。
利用逆变换生成正态分布
知道概率分布函数的话,求反函数,把均匀分布的随机变量代入反函数,就能得到相应的分布。
比如指数分布的概率分布函数
,其反函数
具体方法见下节:
Box-Muller算法
x和y是两个彼此独立、服从[0,1)均匀分布的随机变量,则
是两个彼此独立、服从正态分布的随机变量。
这个应该是自带函数的计算方法。
证明方法:利用联合概率密度、Jacobian来证明。
更快的:Ziggurat算法
基本思想是“拒绝采样”。具体内容见文章开头链接。
![](https://img.haomeiwen.com/i9075867/bd79332b9603b5dd.png)
比直接套逆变换公式要快60%左右。因为逆变换法用到了三角函数和对数函数。
网友评论