C 阵列高斯分布的产生

C 阵列高斯分布的产生,c,random,C,Random,我正在尝试应用此处描述的方法2:。 问题是我有一个4个数字的数组,范围从0到1,我想为这个范围生成一个高斯分布。我已经编码了这个,但它不正确。我错在哪里 float a[3]={0.3,0.7,0.2,0.1}; for (int k=0; k<3; k++) { for (int k1=1; k<4; k++) { if(phase == 0) { U = (rand() + a[k]) / (RAND_MAX + a[k1]); V = r

我正在尝试应用此处描述的方法2:。 问题是我有一个4个数字的数组,范围从0到1,我想为这个范围生成一个高斯分布。我已经编码了这个,但它不正确。我错在哪里

float a[3]={0.3,0.7,0.2,0.1};
for (int k=0; k<3; k++) {
  for (int k1=1; k<4; k++) { 
    if(phase == 0) { 
      U = (rand() + a[k]) / (RAND_MAX + a[k1]);
      V = rand() / (RAND_MAX + a[k]);
      Z = sqrt(-2 * log(U)) * sin(2 * pi * V);
    } else Z = sqrt(-2 * log(U)) * cos(2 * pi * V);
    phase = 1 - phase;
    printf("\n%f",z);
  }
}
float a[3]={0.3,0.7,0.2,0.1};

对于(int k=0;kAre)你得到了一个错误,或者结果与你预期的不同?如果是后者,以什么方式?感谢评论是的,结果甚至不同,它有时给了我负值,这样可以吗?因为当我用Matlab测试它时,值不是负值第一个问题:“a”数组有4个元素,但只声明有3个。第二个问题:内部for循环提到k用于比较和增量操作。这可能是一个错误。感谢更正,我已修复了这两个元素,但在2个值之后,它没有给我相同的输出值。例如:0.34 0.54 0.34 0.54 0.34 0.54 0.54我使用了Srand函数refresh随机值everytimesrand()应该被调用一次来初始化随机数生成器,通常使用时间的返回值(NULL)进行多次初始化。然后从那时起使用rand()。这可能就是为什么您会一次又一次地得到相同的数对。