2011-02-11 53 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

相关问题