c++ - 使用 C++ 的高斯分布无均值和标准差

标签 c++ random normal-distribution

我已经统一生成了随机数。现在我想使用高斯(正态)分布生成随机数。我不知道均值和标准差。我读过这篇文章: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/

相关文章:

c++ - 如何在 C++ 中将 0x70、0x61、0x73 ... 等转换为 Pas ... 等?

c++ - C、C++ 中的 Shell 上下文菜单

c++ - ITK安装及示例程序

c++ - 在 C++ 中实现多变量正态 pdf 以进行图像分类

c++ - 如何重置 qtreemodel ?删除行功能应该是什么样子?

C++;循环随机化数组键不起作用

javascript - 无法正确使用 Math.random

mysql - 如果为空则从 MySQL 检索随机数据查找下一个

matlab - 在Matlab中将正态分布划分为等概率区域

python-3.x - 如何生成将显示正态分布的倒钟形曲线的数据