用于模拟应用的C++normal_distribution函数

C++ normal_distribution function for simulation application

本文关键字:distribution 函数 C++normal 模拟 应用 用于      更新时间:2023-10-16

我想知道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::mt19937std::mersenne_twister_enginetypedef

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

幸运的是,<random>库还包含一组随机数生成器。特别是Mersenne Twister(std::mt19937)是一种相对较好的(即快速且统计上高质量的)Twister。

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

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