【问题标题】:Gaussian distribution using C++ no mean and standard devition使用 C++ 无均值和标准差的高斯分布
【发布时间】:2012-11-10 19:52:48
【问题描述】:

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

【问题讨论】:

  • 如果您不知道均值和方差(标准差),就会陷入困境。
  • 询问如何生成没有均值和标准差的高斯分布有点像要求没有最小值和最大值的均匀分布。
  • 您对所需的发行版了解多少?我假设您确实对它的行为方式有所了解(否则是什么阻止您随机选择均值和方差?)...
  • 我需要以 4 度的间隔迭代 for 循环。间隔 [-45:+45] 应该跨过 4 度 [我已经这样做了]。然后在这个 4 度的实例中,我需要假设一个 2 度粒度的高斯分布试验。所以我不知道如何假设这条路径的均值和标准分布
  • 均值是分布的中心点,曲线的峰值。标准偏差有效地描述了分布的“分散”程度。您可以使用 matlab 或 excel 或一些合适的免费替代品来可视化一些示例分布,并在没有任何更有原则的标准的情况下通过眼睛选择合适的值。

标签: c++ random normal-distribution


【解决方案1】:

当你生成均匀分布(在一个段中)的随机数时,你需要两个参数:段的下边界和段的上边界。通常,它们分别为 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] 范围的数字。

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

希望对你有所帮助!

【讨论】: