2011-02-11 125 views
2

我的家庭作業我要生成一組數字到一個固定點,允許的意思是0和標準差爲1.我一直主要處理一個雙打數組來嘗試這個,但是我不知道如何完成這一點。如何隨機生成一個平均值爲0,標準偏差爲1的雙精度數組?

爲了產生值,我已經使用盒穆勒方法嘗試,但我仍然從平均值= 1和SD = 1的標誌結束與一個均值和標準偏差這就是仍然關閉標準正態分佈

更新:好的,我剛剛意識到我的錯誤。對於box muller,我打錯了2代替3。現在解決了這個問題。

//Create Standard Normal Distribution 
void std_find(double a[],double s[], int pop, int samp){// 
    //generate random numbers for std normal 
    double *p; 
    p = a; 
    //generate numbers in standard normal 
    double numA = 0; 
    double numB = 0; 
    double PI = 3.14159; 
    //Box_Muller 
    for(int i = 0; i < pop; i= i+2){ 
     numA = (rand() * 1)/(double)32767; 
     numB = (rand() * 1)/(double)32767; 
     *p = sqrt((double)-3 * (log(numB))) * cos((double)3* PI*numA); 
     p++; 
     *p = sqrt((double)-3 * (log(numB))) * sin((double)3 *PI*numA); 
     p++; 
    } 
    double popMean = mean(a,(double)pop); 
    //double popMean = (double)0; 
    double popSD = sqrt(sampleV(a,pop)); 
    //double popSD = (double)1; 
    cout << "\nPopulation Mean of the std: " << popMean; 
    cout << "\nPopulation Standard deviance of std: " << popSD; 
    //population created, now to create sample 
    sample(a,s,samp,popMean,popSD); 
    } 
+1

重要的是給定的結果集滿足這些標準(在這種情況下,最後的數字不是隨機的),或者生成器應該爲無限數量的值做? – 2011-02-11 10:29:57

回答

3

一個較好的常用方式去這是產生遵循一個標準正態分佈(定義爲μ= 0和σ正態分佈數= 1)。查看正態分佈的Wikipedia article,特別是「生成正態分佈的值」部分。

+3

嚴格地說,你不需要*,有很多其他的均值爲0和方差爲1的分佈。例如,範圍+/- sqrt(3)上的均勻分佈。但我認爲你是對的,這是提問者的意思:-) – 2011-02-11 11:21:17

相關問題