均勻隨機數生成
先來說說均勻隨機數生成,這是非均勻隨機數的生成基礎。
例如,我們現在有drand()函式,可以隨機生成[0,1]範圍內的均勻隨機數。
要求一個drand2()函式,能夠生成[0,2]內的均勻隨機數。
顯然有:
\[drand2()=2*drand()
\]
但是很多時候,我們希望生成的隨機數是有一定概率偏向的。
比如生成[0,2]的隨機數,越偏向2的數,出現的概率越大,顯然上面的\(2*drand()\)無法滿足要求。
例如,我們的隨機數的概率密度分佈如下:
生成指定概率密度的隨機數
先上結論:
設概率密度函式\(f(x)\),概率累計分佈函式\(F(x)\),生成概率密度為\(f(x)\)的隨機數的函式如下:
\[F^{-1}(drand())
\]
那麼,為什麼使用累積分佈函式(CDF)的反函式,就能生成符合概率密度分佈函式(PDF)的隨機數呢?
證明
設概率密度函式\(f(x)\),概率累計分佈函式\(F(x)\),\(\xi\)表示服從\((0,1)\)均勻分佈的隨機變數,變換函式為\(G\),隨機變數\(X=G(\xi)\),其中\(F(x)\)為單調遞增函式。
由概率分佈定義知:
\[P\{X<a\}=F(a)
\]
\[P\{G(\xi)<a\}=F(a)
\]
若\(G(\xi)\)為單調遞增函式,可得:
\[P\{\xi<G^{-1}(a)\}=F(a)
\]
已知\(\xi\)在\((0,1)\)上均勻分佈,可得:
\[P\{\xi<b\}=b,b \in (0,1)
\]
\[P\{\xi<G^{-1}(a)\}=F(a)=G^{-1}(a)
\]
故有F,G互為反函式,即:
\[X=G(\xi)=F^{-1}(\xi)
\]