我已经统一生成了随机数。现在我想使用高斯(正态)分布生成随机数。我不知道均值和标准差。我读过这篇文章:http://www.johndcook.com/cpp_TR1_random.html#normal ,但它需要均值和标准差! 我也知道 Box-Muller 变换是常用的。这正确地产生了具有正态分布的值。但我还是不知道均值和标准偏差。 请不要提振。 请问有人可以帮忙吗?
最佳答案
当您生成(在一个段中)均匀分布的随机数时,您需要两个参数:段的下边界和段的上边界。通常,它们分别为 0 和 1,因此您可以获得 [0..1]
范围内的数字。
现在,要生成正态分布的数字,您还需要两个参数:均值和标准差。但是,它们具有不同的含义。平均值是您生成的数字将围绕其收集的数字:如果您指定,比如说,15,您可能会看到 11、17、13、21、9、12、14、11 等,但(通常)不会看到 290或 -562。标准差 (sigma) 基本上决定了生成的数字偏离均值的程度。严格来说,可能会生成任意数量级的数字:即使您指定均值 0 和 sigma 1e-6
,您仍然可能会得到 1000 — 但这种可能性很小。
根据经验,几乎所有生成的数字都在 [mean - 3 * sigma .. mean + 3 * sigma]
范围内,我打赌你不会看到任何超出[mean - 5 * sigma .. mean + 5 * sigma]
生活中的范围。
有一个“标准”正态分布的概念:均值 = 0,西格玛 = 1。这意味着您将获得大部分在 [-3..3]
范围内的数字。
希望对您有所帮助!
关于c++ - 使用 C++ 的高斯分布无均值和标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13512306/