因此大多数编程语言都包含rand()功能,您可以在其中生成0到1之间的随机数....
我的问题是,有没有办法操纵这个标准的rand()功能,这样你就可以用正态和标准差从正态分布中抽取一个随机数?
请注意,我不是在问一种语言是否内置了正常的分发功能,我问你是否可以使用rand()函数“模拟”绘制正态分布随机变量...
答案 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;
}