蒙特卡洛模拟稳定性的代码c++
时间: 2023-10-18 15:16:21 浏览: 37
蒙特卡罗模拟的稳定性可以通过多次重复模拟并计算统计指标的方差来评估。以下是一个简单的C++代码示例:
```c++
#include <iostream>
#include <vector>
#include <random>
#include <cmath>
// 计算平均值和方差
void calculateMeanAndVariance(const std::vector<double>& data, double& mean, double& variance)
{
double sum = 0.0;
double squared_sum = 0.0;
for (auto d : data)
{
sum += d;
squared_sum += pow(d, 2);
}
mean = sum / data.size();
variance = squared_sum / data.size() - pow(mean, 2);
}
int main()
{
const int num_simulations = 100; // 模拟次数
const int num_samples = 1000; // 每次模拟的样本数
std::random_device rd;
std::mt19937 gen(rd());
std::normal_distribution<double> dist(0.0, 1.0); // 正态分布随机数生成器
std::vector<double> results(num_simulations);
// 多次重复模拟
for (int i = 0; i < num_simulations; ++i)
{
std::vector<double> samples(num_samples);
// 生成样本
for (int j = 0; j < num_samples; ++j)
{
samples[j] = dist(gen);
}
// 计算统计指标(此处为样本平均值)
double mean = 0.0;
for (auto s : samples)
{
mean += s;
}
mean /= num_samples;
results[i] = mean;
}
// 计算平均值和方差
double mean = 0.0, variance = 0.0;
calculateMeanAndVariance(results, mean, variance);
std::cout << "Mean: " << mean << std::endl;
std::cout << "Variance: " << variance << std::endl;
return 0;
}
```
该代码使用了C++11中的随机数生成器(std::random_device和std::mt19937),并使用正态分布随机数生成器(std::normal_distribution)生成样本。在每次模拟中,生成num_samples个样本,计算它们的平均值,并将结果存储在results向量中。最后,使用calculateMeanAndVariance函数计算results向量的平均值和方差,并输出结果。