我正在尝试编写一个C ++函数,该函数将根据给定的均值和方差返回高斯随机值。
有一个库函数rand()
,该函数返回0
和之间的随机数RAND_MAX
。RAND_MAX
没有固定的值,但可以保证至少为。其PDF是统一的。
我正在使用中央极限定理将其转换rand()
为高斯变量。我正在做的是调用rand()
用户指定的时间,然后将其返回值加起来,然后将其均值转换为用户指定的均值。
在上面的图中,我将高斯随机生成器调用了次,并绘制了其返回值的频率。如您所见,它的方差很大,因为它是由许多其他随机值的总和创建的。
它成功返回具有高斯PDF和指定平均值的高斯变量。但是,问题在于其差异。我被困在这一点上,因为我不知道如何将其方差更改为用户指定的值。
这是我的代码(暂时不完整;参数“方差”被忽略):
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。
我想根据函数的参数更改随机变量的方差。我的问题是,如何更改此随机变量的方差?我该怎么做?