我正在尝试编写一个 C++ 函数,该函数将返回高斯随机值,给定它们的均值和方差。
有一个库函数,它返回和rand()
之间的随机数。没有固定值,但保证至少会0
RAND_MAX
RAND_MAX
. 它的PDF是统一的。
我正在使用中心极限定理将其转换rand()
为高斯变量。我正在做的是调用rand()
用户指定的时间,然后将它们的返回值相加,然后将其平均值转换为用户指定的平均值。
在上面的绘图中,我将我的高斯随机生成器称为次,并绘制其返回值的频率。如您所见,它的方差很大,因为它是由许多其他随机值的总和创建的。
它成功返回具有高斯 PDF 和指定平均值的高斯变量。然而,问题在于它的方差。我被困在这一点上,因为我不知道如何将其方差更改为用户指定的值。
这是我的代码(目前不完整;参数“Variance”被忽略):
template <class T>
T Random::GetGaussian(T Mean /*= 0*/, T Variance /*= 1*/)
{
T MeanOfSum = NUM_GAUSSIAN_SUMS / static_cast<T>(2);
T Rand = 0;
for (uint64_t i=0; i<NUM_GAUSSIAN_SUMS; i++)
{
Rand += static_cast<T>(rand()) / RAND_MAX;
}
return Rand - (MeanOfSum - Mean);
}
假设NUM_GAUSSIAN_SUMS
为 100,RAND_MAX
则为 32767。
我想根据函数的参数改变随机变量的方差。我的问题是,我怎样才能改变这个随机变量的方差?我该怎么做?