均勻隨機數生成
先來說說均勻隨機數生成,這是非均勻隨機數的生成基礎。
例如,我們現在有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) \]
直觀理解見閆令琪老師的課程:https://www.bilibili.com/video/BV1my4y1z76s?t=4579&p=3
更多拓展見:https://zhuanlan.zhihu.com/p/191487550