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