Re: [問題] C++模擬normal distribution

看板C_and_CPP (C/C++)作者 (Stanley)時間18年前 (2006/05/20 16:22), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串1/1
※ 引述《Procyon (...)》之銘言: : 如題 : 怎麼用C++跑出1000個為normal distribution的數字阿?? : 謝謝囉~ 之前作業的一部份,這是利用rejection method產生Z~N(0,1) 若要產生Y~N(μ,σ^2),則Y=μ+σZ (pf by mgf) 有興趣的話參考Ross的A course in simulation ------------------------------------- //DevC++ 4.9(g++ 3.4.2) Source code #include<iostream> #include<cmath> #include<ctime> using namespace std; double uniform(); double rejection(); const int MAX=1000000; int main() { srand(time(NULL)); double a=0; for(int i=0;i<MAX;i++)a+=rejection(); cout<<"bar_X="<<a/MAX<<endl; //sample mean system("pause"); return 0; } double rejection()//generate N(0,1) by rejection method { double Y;//exp(1) double U;//uniform(0,1) do{ Y=(-1)*log(uniform()); U=uniform(); }while(U>exp((-1)*pow(Y-1,2.)/2)); return uniform()<=0.5?Y:-Y; //distribute to Z or -Z } double uniform() { int k=(int)pow(2.,15.); return rand()%k/(double)k; } ------------------------------ Output bar_X=0.00025193 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.239.175

05/20 23:28, , 1F
rejection 和參數轉換有何不同啊?
05/20 23:28, 1F

05/21 00:02, , 2F
方法不同
05/21 00:02, 2F
※ 編輯: iambbegg 來自: 59.104.239.175 (05/21 00:18)

05/21 08:02, , 3F
謝謝
05/21 08:02, 3F
文章代碼(AID): #14Rj7NBO (C_and_CPP)
文章代碼(AID): #14Rj7NBO (C_and_CPP)