2012-01-05 67 views
0

因此大多数编程语言都包含一个rand()函数,您可以在其中生成0到1之间的随机数。 ,有没有办法操纵这个标准的rand()函数,这样你就可以用平均值和标准偏差从正态分布中抽取一个随机数?使用标准rand()函数从标准正态分布中绘制随机数

请注意,我不是问一个语言是否具有内置的正常分布功能,我问你是否可以使用rand()函数“模拟”绘制一个正态分布的随机变量...

+0

这是否帮助:转换-A-均匀分布到一个正常的分布(http://stackoverflow.com /问题/ 75677 /转换-一个均匀分布到一个正常分布) – nishant 2012-01-05 09:18:48

回答

1

这里是工作(从here)的简单方法:

static Random r = new Random(); 
    static double Normal(double mu, double sig) 
    { 
     double u, v, x, y, q; 
     do 
     { 
      u = r.NextDouble(); 
      v = 1.7156 * (r.NextDouble() - 0.5); 
      x = u - 0.449871; 
      y = Math.Abs(v) + 0.386595; 
      q = Math.Sqrt(x) + y * (0.19600 * y - 0.25472 * x); 
     } while (q > 0.27597 && (q > 0.27846 || Math.Sqrt(v) > -4.0 * Math.Log(u) * Math.Sqrt(u))); 
     return mu + sig * v/u; 
    }