3 回答

TA貢獻1836條經(jīng)驗 獲得超13個贊
有許多方法可以從常規(guī)RNG生成高斯分布數(shù)。
該箱穆勒變換是常用的。它正確生成具有正態(tài)分布的值。數(shù)學很容易。您生成兩個(統(tǒng)一)隨機數(shù),并通過對它們應用公式,您將獲得兩個正態(tài)分布的隨機數(shù)。返回一個,并保存另一個以獲取隨機數(shù)的下一個請求。

TA貢獻1806條經(jīng)驗 獲得超8個贊
C ++ 11
C ++ 11提供的std::normal_distribution,這就是我今天要走的路。
C或更舊的C ++
以下是按復雜程度遞增的順序解決方案:
從0到1添加12個均勻隨機數(shù)并減去6.這將匹配正常變量的均值和標準差。一個明顯的缺點是范圍限制在±6 - 與真正的正態(tài)分布不同。
Box-Muller變換。這在上面列出,并且實現(xiàn)起來相對簡單。但是,如果您需要非常精確的樣本,請注意Box-Muller變換與一些統(tǒng)一的生成器相結(jié)合會遭受稱為Neave Effect 1的異?,F(xiàn)象。
為了獲得最佳精度,我建議繪制制服并應用反向累積正態(tài)分布來得到正態(tài)分布的變量。這是一個非常好的逆累積正態(tài)分布算法。
1. HR Neave,“使用具有乘法同余偽隨機數(shù)發(fā)生器的Box-Muller變換”,Applied Statistics,22,92-97,1973
- 3 回答
- 0 關注
- 1121 瀏覽
添加回答
舉報