在C/C 中產生常態分佈的隨機數
在C 或C 中產生遵循常態分佈的隨機數是一項常見任務在各種計算和統計應用。使用 Box-Muller 變換可以有效地實現這一點,Box-Muller 變換是一種廣泛採用的技術,它利用兩個均勻隨機數來產生一對正態分佈的隨機數。
Box-Muller 變換依賴於一個簡單的數學公式:
x = sqrt(-2 * ln(u1)) * cos(2 * pi * u2) y = sqrt(-2 * ln(u1)) * sin(2 * pi * u2)
其中 u1 和 u2 是在 [0, 1] 範圍內產生的兩個獨立的均勻隨機數。這兩個方程式定義了兩個獨立的隨機變數 x 和 y,它們遵循平均值為零且單位變異數為零的常態分佈。
要在 C/C 中實作此方法,可以採取以下步驟:
double rand0to1() { return rand() / (RAND_MAX + 1.0); }
pair<double, double> box_muller() { double u1 = rand0to1(); double u2 = rand0to1(); double x = sqrt(-2.0 * log(u1)) * cos(2.0 * M_PI * u2); double y = sqrt(-2.0 * log(u1)) * sin(2.0 * M_PI * u2); return {x, y}; }
此方法有效地產生隨機數遵循常態分佈的數字,無需外部函式庫。
以上是如何使用 Box-Muller 轉換在 C/C 中產生常態分佈隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!