使用标准rand()函数从标准正态分布中绘制随机数

时间:2012-01-05 08:58:43

标签: math variables random statistics numbers

因此大多数编程语言都包含rand()功能,您可以在其中生成0到1之间的随机数....

我的问题是,有没有办法操纵这个标准的rand()功能,这样你就可以用正态和标准差从正态分布中抽取一个随机数?

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

1 个答案:

答案 0 :(得分: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;
    }