用于模拟应用的C++normal_distribution函数
C++ normal_distribution function for simulation application
我想知道normal_distribution函数使用什么样的随机数生成器?
它适合科学模拟应用吗?
问候
std::normal_distribution
不进行任何随机数生成。它是一个随机数分布。随机数分布仅将随机数引擎返回的值映射到某种分布。他们自己不做任何一代人。所以你关心的是随机数引擎。
std::mersenne_twister_engine
是该标准提供的随机数引擎之一,是一个非常高质量的随机数发动机。你可以用它来生成具有正态分布的随机数,比如:
std::random_device rd;
std::mt19937 gen(rd()); // Create and seed the generator
std::normal_distribution<> d(mean, deviation); // Create distribution
std::cout << d(gen) << std::endl; // Generate random numbers according to distribution
注意,std::mt19937
是std::mersenne_twister_engine
的typedef
。
<random>
标准库的全部目的是将分布与随机数生成器分离您提供了一个生成均匀整数的随机数生成器,分布负责将该随机、均匀整数序列转换为所需分布的样本。
幸运的是,<random>
库还包含一组随机数生成器。特别是Mersenne Twister(std::mt19937
)是一种相对较好的(即快速且统计上高质量的)Twister。
(您还需要为生成器提供种子。)
我知道这篇文章很旧,但我希望我的回答是有益的。我使用normal_distribution
为传感器生成高斯噪声。这对于模拟传感器是有益的。例如,假设你有一个传感器,它可以在2D中为你提供机器人的位置。每次你移动机器人时,传感器都会给你一些机器人位置的读数。在OpenGL中,可以模拟此示例。例如,可以跟踪鼠标的位置,并在鼠标的实际位置添加一些高斯噪声。在这种情况下,您有一个传感器来跟踪鼠标的位置,但由于噪声,它具有不确定性。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 在调试中,如何知道对函数的重复调用中参数的统计数据(max-min,average,distribution..)