[Math]服从高斯分布的随机生成器 - 续
修改@2010.11.2
由于篇幅过长,分为两段,生成器的基本目的和来源请参照前文。
上一篇讲到Marsaglia Polar Method方法的证明,终于在最近翻阅了一些资料后想通啦。
以下给出证明,惊人的发现此证明竟还能一并完成Box-Muller Transformation的证明,简直太神奇啦^_^。
在这之前,我们首先引出Inverse transform sampling定理(中文可能是反变换定理,反变换法吧。)
定义:假设u=F(x)是一个连续累计分布函数(也就是一个密度函数的积分), F-1为其反函数。
定理:如果U是一个均匀分布(0,1)的随机变量的话,则F-1(U)服从函数F给出的分布。
证明:
这样就导出一个方法:
输入:一组[0,1]之间的满足均匀分布的随机数U
任务:给定一个分布的密度函数f(x),要生成满足这一分布的一组随机数。
输出:一组满足f(x)的随机数V
方法:1)求f(x)的分布函数F(x)
2)求F(x)的反函数F'(x)
3)对于U中的每一个元素u,将F'(u)加入序列V中。
据此,我们发现
只要求出正态分布的密度函数的分布函数的反函数,然后直接代入服从均匀分布的随机数,
所得的结果即为服从正态分布的随机数了!
接下来如何导出正态分布pdf(probabilistic distribution function概率密度函数)的分布函数的反函数呢?(太拗口了。。。)
我们都非常熟悉了正态分布的pdf,但是其分布函数(也就是从0-x的积分)据我所知很难搞定。
< 如果是无穷积分的话还有可能搞出来(用个平方和的技巧) >
其实,我们这里使用和这个平方和技巧相同的方法。进行变形,就可以神奇的得到BoxMuller了~
过程如下:
使用两个正态分布的概率密度函数
以及
用上述的化为极坐标的技巧,
将x=rcos(theta), y=rsin(theta)
这样可以得到极坐标上的两个正交的服从正态分布的变量
概率为
具体步骤不再详述,利用了Jacobian行列式,然后就直接得到这个结果啦。
接下来根据上述的方法1)2)3)
步骤1) 首先对其分别积分,得到分布函数
以及
步骤2)
求上述函数的反函数
据此,我们其实已经证明了Marsaglia polar method方法。所以这个才叫做polar法~
步骤3)
代入服从均匀分布的随机数,得到
因为服从均匀分布(0,1),所以可以将
终于,我们对Box-Muller Transformation证明完毕。
历时许久,终于将随机数生成的方法和背后的想法以及证明搞明白了。
看似简单的一个方法,其内部竟然如此复杂,数学概念和证明也一大把。。。
数学果然是非常高深的一门基础的基础学科呀!
如有错误望高手多多指点~