使用C ++的高斯分布没有均值和标准差

时间:2012-11-22 11:57:51

标签: c++ random normal-distribution

我统一生成随机数。现在我想使用高斯(正态)分布生成随机数。我不知道平均值和标准差。我读过这篇文章:http://www.johndcook.com/cpp_TR1_random.html#normal,但它需要一个均值和标准差! 我也知道Box-Muller变换是常用的。这正确地生成具有正态分布的值。但我又不知道平均值和标准偏差。 请不要提升。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

当您生成均匀分布(在段中)随机数时,您需要两个参数:段的低边界和段的上边界。通常,它们分别为0和1,因此您可以从[0..1]范围获得数字。

现在,要生成正态分布的数字,还需要两个参数:均值和标准差。然而,它们有不同的含义。平均值是一个数字,您生成的数字将围绕该数字收集:如果您指定,例如15,您可能会看到11,17,13,21,9,12,14,11等,但不是(通常)290或-562。并且标准偏差(sigma)基本上决定了生成的数字离平均值有多远。严格来说,可能会生成任意数量的数量:即使您指定平均值0和西格玛1e-6,您仍然可以获得1000 - 但这是不太可能的。

根据经验,几乎所有生成的数字都在[mean - 3 * sigma .. mean + 3 * sigma]范围内,我打赌你不会看到生命中[mean - 5 * sigma .. mean + 5 * sigma]范围之外的任何内容。

有一个“标准”正态分布的概念:均值= 0,sigma = 1.这意味着你的数字大部分都在[-3..3]范围内。

我希望它有所帮助!