[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证明完毕。

 

历时许久,终于将随机数生成的方法和背后的想法以及证明搞明白了。

看似简单的一个方法,其内部竟然如此复杂,数学概念和证明也一大把。。。

数学果然是非常高深的一门基础的基础学科呀!

如有错误望高手多多指点~

posted @ 2010-11-02 17:42  JimmyQi  阅读(4265)  评论(5编辑  收藏  举报