1. 程式人生 > >推導:通過均勻分佈來產生任意分佈隨機數

推導:通過均勻分佈來產生任意分佈隨機數

最近想用C語言寫一個產生服從指數分佈的隨機數的程式。從網上找了找,發現可以通過均勻分佈來產生服從任意分佈的隨機數。然而,網上的推導不是很完善,我把自己的理解寫在這裡,有不嚴謹的地方請大家指正。

命題1:對一連續型隨機變數X,設它的分佈函式為F(x) = P { X ≤ x }。對X的某一取值x,對應於一個F(x),因此F(x)也是一個隨機變數,記為Y=F(x)。則Y服從[ 0,1 ]上的均勻分佈

證1:Y的取值範圍是[ 0,1 ],Y的概率密度函式記為f(y)。以下二式成立:

可得f(y)=1,即Y服從[ 0,1 ]上的均勻分佈

命題2:對隨機變數X,已知它的分佈函式是F(x);有另一隨機變數Y=f1(X),f1是嚴格單調增函式;我們可以得到Y的分佈函式G(y)。反過來,若已知Y的分佈函式是G(y),X=f2(Y),f2是f1的反函式,則我們可以得到X的分佈函式是F(x)。

證2:G(y) = P{ Y ≤ y } = P{ f1(X) ≤ y } = P{ X ≤ f2(y) } = F[ f2(y) ]

          F(x) = P{ X ≤ x } = P{ f2(Y) ≤ x } = P{ Y ≤ f1(x) } = G[ f1(x) ] = F{ f2[ f1(y) ] } = F(x)

結論:如果要產生一個隨機變數的一個觀測值,且該隨機變數的分佈函式F(x)嚴格單調遞增,可以這樣做:

先產生一個服從[ 0,1 ]上均勻分佈的隨機數,也就得到一個F(x)的值,通過F(x)的反函式G(x)得到x=G(y),這個x就是服從我們想要的那個分佈的一個隨機值。

————————————————————————

現在才知道上述取樣方法稱為反變換取樣

Wiki百科上有更好的證明方法。