更改随机数生成器的参数
Change parameters of random number generator
我正在使用boost::random
生成随机速度值,我想根据用户输入更改平均值和方差。
我正在使用以下内容:
typedef boost::mt19937 RNG;
static RNG rng();
typedef boost::normal_distribution<double> DIST;
DIST dist_east(vel_e, sigma);
DIST dist_north(vel_n, sigma);
boost::variate_generator<RNG, DIST> east(rng, dist_east);
boost::variate_generator<RNG, DIST> north(rng, dist_north);
velocity.east = east();
velocity.north = north();
我的问题是每次调用它时我只从两个变量生成器返回一个值。当我更改vel_e、vel_n或 sigma 时,值会发生变化,但除此之外,我会返回相同的值。
我尝试将dist_east、dist_north、东和北对象设为静态,但在构造后无法更改参数。
有没有办法实现我想要的?
在我看来,最快的方法是与 sigma 1 和平均值 0 进行正态分布。通过这种方式,您可以从任何正态分布中获取值,只需乘以新的西格玛并添加平均值即可。
y = mean + sigma * x
如果 U 是均值为 0 且方差为 1 的正态分布随机变量,则
V = mu + sigma * U
正态分布,均值 mu 和方差西格玛²。
因此,您所需要的只是生成标准的正态随机变量(平均值 0,stdev 1)并正确缩放它们。
我认为你可能以错误的方式处理这个问题。与其修改随机数生成器以获得所需的平均值和偏差,不如让随机生成器始终为您提供均匀分布。然后,创建自己的函数,将这种均匀分布作为输入,并将所需的分布作为输出。
如果你想要正态分布,你可以在维基百科页面看到,从均匀分布生成正态分布非常容易。
编辑:这是一些伪代码(我不知道提升随机生成器是如何工作的)
generateNormalDistribution(mean, deviation)
X = boost::uniformGeneratorBetween0and1
Y = boost::uniformGeneratorBetween0and1
return [sqrt(-2*ln(X)) * cos(2*pi*Y)]*deviation + mean
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 制作具有平均值的随机数生成器
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 尝试在 c++ 中创建随机数生成器并收到错误
- 存储并重新加载随机数生成器状态
- 作为随机数生成器的争用条件
- 播种随机数生成器以使用分叉的好方法是什么?
- 随机数生成器的性能因平台而异
- 随机数生成器的种子和状态有什么区别?
- RcppShark 随机森林示例引发有关随机数生成器的异常
- C++多个实例的随机数生成器组种子中增强
- C++随机数生成器仅生成 0 - C++ 11
- GSL+OMP:C++中的线程安全随机数生成器
- 贪吃蛇游戏 - 食物瓷砖的随机数生成器
- 随机数生成器在 C++ 用于 skipList.
- RSA 加密和解密期间的随机数生成器要求
- 如何使用 cpp 设置随机数生成器的语法?
- 传递参数、参数、交换函数和随机数生成器
- 了解随机数生成器调用中的C 参数
- 更改随机数生成器的参数