C++实现MATLAB中的normrnd函数
时间: 2024-05-01 22:23:58 浏览: 172
MATLAB中的`normrnd`函数用于生成符合正态分布的随机数,可以使用C++中的随机数库来实现类似的功能。以下是一个基于Box-Muller变换的实现示例:
```c++
#include <iostream>
#include <random>
#include <cmath>
double normrnd(double mu, double sigma) {
// 初始化随机数生成器
std::default_random_engine generator;
// 正态分布
std::normal_distribution<double> distribution(mu, sigma);
// 生成两个独立的均匀分布随机数
double u1 = distribution(generator);
double u2 = distribution(generator);
// Box-Muller变换
double z1 = std::sqrt(-2 * std::log(u1)) * std::cos(2 * M_PI * u2);
//double z2 = std::sqrt(-2 * std::log(u1)) * std::sin(2 * M_PI * u2);
return z1;
}
int main() {
std::cout << normrnd(0, 1) << std::endl;
return 0;
}
```
其中,`mu`和`sigma`分别表示正态分布的均值和标准差。在上述代码中,使用`std::default_random_engine`初始化随机数生成器,并使用`std::normal_distribution`定义一个正态分布。然后,调用两次`distribution(generator)`生成两个独立的均匀分布随机数,再使用Box-Muller变换得到符合正态分布的随机数。最后返回生成的随机数即可。
阅读全文