修改@2010.11.2
由於篇幅過長,分為兩段,生成器的基本目的和**請參照前文。
以下給出證明,驚人的發現此證明竟還能一併完成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證明完畢。
歷時許久,終於將隨機數生成的方法和背後的想法以及證明搞明白了。
看似簡單的乙個方法,其內部竟然如此複雜,數學概念和證明也一大把。。。
數學果然是非常高深的一門基礎的基礎學科呀!
如有錯誤望高手多多指點~
matlab生成二維服從高斯分布的資料
由於實驗需要,需要生成兩類模式的資料,同時這兩類資料要服從正態分佈 高斯分布 使用matlab來實現 mu 2 3 sigma 1 0 0 2 r mvnrnd mu,sigma,100 plot r 1 r 2 r hold on mu 7 8 sigma 1 0 0 2 r2 mvnrnd mu...
C C 生成高斯分布隨機數
產生正態分佈或高斯分布的三種方法 1.運用中心極限定理 大數定理 1 include 2 include 3 4 define nsum 25 5 6 double gaussrand 7 14 15 x nsum 2.0 16 x sqrt nsum 12.0 17 18 return x 19 ...
高斯分布的理解
高斯分布 gaussian distribution 又稱正態分佈 normal distribution 最早由a.棣莫弗在求 二項分布 的漸近公式中得到。c.f.高斯在研究測量誤差時從另乙個角度匯出了它。p.s.拉普拉斯和高斯研究了它的性質。1 是乙個在 數學 物理及工程等領域都非常重要的 概率...