我想知道 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
一个typedef
。std::mersenne_twister_engine
<random>
标准库的重点是将分布与随机数生成器分开。您提供一个生成均匀整数的随机数生成器,该分布负责将该随机、均匀的整数序列转换为所需分布的样本。
幸运的是,该<random>
库还包含一组随机数生成器。Mersenne Twister std::mt19937
(
(您还需要为生成器提供种子。)
我知道帖子很旧,但是,我希望我的回答是有益的。我用来normal_distribution
为传感器生成高斯噪声。这有利于模拟传感器。例如,假设您有一个传感器,可以为您提供 2D 机器人的位置。每次移动机器人时,传感器都会为您提供机器人位置的一些读数。在 OpenGL 中,您可以模拟此示例。例如,您可以跟踪鼠标的位置,并在鼠标的真实位置上添加一些高斯噪声。在这种情况下,您有一个跟踪鼠标位置的传感器,但是由于噪声,它具有不确定性。