問題:
如何輕鬆產生隨機數在不使用Boost 的情況下遵循C 或C 的常態分佈函式庫?
答案:
Box-Muller 變換
Box-Muller 變換是一種廣泛使用的生成方法來自均勻隨機數產生器的常態分佈數字。它產生的值精確地遵循高斯分佈。
Box-Muller 轉換的數學公式如下:
x = sqrt(-2 * log(U1)) * cos(2 * π * U2) y = sqrt(-2 * log(U1)) * sin(2 * π * U2)
其中:
實現:
要在C/C實現Box-Muller變換,可以使用以下代碼:
#include#include double box_muller() { std::random_device rd; // Seed the random number generator with a system clock seed std::default_random_engine rng(rd()); std::uniform_real_distribution dist(0.0, 1.0); double U1 = dist(rng); double U2 = dist(rng); double x = sqrt(-2 * log(U1)) * cos(2 * M_PI * U2); return x; }
用法:
用法:double random_number = box_muller();
要產生常態分佈的隨機數,只要呼叫box_muller() 函式即可:
double random_number = box_muller (); random_number 的值將是均值為0.標準差的高斯分佈隨機變數1.
如果您需要產生平均值不為 0 或標準差不為 1 的常態分佈數字,您可以將結果乘以 持續的。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3