1

我想知道 normal_distribution 函数使用什么样的随机数生成器?

它适合科学模拟应用吗?

问候

4

3 回答 3

3

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一个typedefstd::mersenne_twister_engine

于 2013-02-19T19:34:05.073 回答
1

<random>标准库的重点是分布与随机数生成器分开。提供一个生成均匀整数的随机数生成器,该分布负责将该随机、均匀的整数序列转换为所需分布的样本。

幸运的是,该<random>库还包含一组随机数生成器。Mersenne Twister std::mt19937

(您还需要为生成器提供种子。)

于 2013-02-19T19:32:56.903 回答
0

我知道帖子很旧,但是,我希望我的回答是有益的。我用来normal_distribution为传感器生成高斯噪声。这有利于模拟传感器。例如,假设您有一个传感器,可以为您提供 2D 机器人的位置。每次移动机器人时,传感器都会为您提供机器人位置的一些读数。在 OpenGL 中,您可以模拟此示例。例如,您可以跟踪鼠标的位置,并在鼠标的真实位置上添加一些高斯噪声。在这种情况下,您有一个跟踪鼠标位置的传感器,但是由于噪声,它具有不确定性。

于 2014-03-02T14:58:01.523 回答