2012-01-05 110 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; 
    }