蒙特卡洛——使用CDF反函式生成非均勻隨機數

mirroooor發表於2021-04-16

均勻隨機數生成

  先來說說均勻隨機數生成,這是非均勻隨機數的生成基礎。

  例如,我們現在有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://zhuanlan.zhihu.com/p/191487550

相關文章