3

我正在尝试生成一些具有简单非均匀概率的随机数来模拟逼真的数据以进行测试。我正在寻找一个接受 mu 和 sigma 作为参数并返回 x 的函数,其中 x 在某些范围内的可能性遵循标准钟形曲线或附近。它不需要非常精确甚至高效。生成的数据集不需要与我设置的确切 mu 和 sigma 匹配。我只是在寻找一个相对简单的非均匀随机数生成器。将一组可能的返回值限制为整数就可以了。我已经看到了很多建议,但似乎没有一个适合这个简单的案例。

4

2 回答 2

2

简而言之,Box-Muller 变换:

首先,从区间 (0, 1] 中得到两个独立的、均匀的随机数,分别称为 U 和 V。

然后你可以从公式中得到两个独立的、单位正态分布的随机数

X = sqrt(-2 * log(U)) * cos(2 * pi * V);
Y = sqrt(-2 * log(U)) * sin(2 * pi * V);

这为您提供了 mu = 0、sigma = 1 的 iid 随机数;要设置 sigma = s,请将随机数乘以 s;要设置 mu = m,请将 m 添加到您的随机数中。

于 2010-10-18T05:35:20.967 回答
0

我的第一个想法是为什么你不能使用现有的图书馆?我确信大多数语言已经有一个用于生成普通随机数的库。

如果由于某种原因您不能使用现有库,那么@ellisbben 概述的方法非常易于编程。一个更简单(近似)的算法只是将 12 个统一数字相加:

X = -6 ## We set X to be -mean value of 12 uniforms
for i in 1 to 12:
   X += U

X 的值近似正常。下图显示了该算法与正态分布相比的 10^5 次抽取。

在此处输入图像描述

于 2011-08-31T11:00:49.680 回答