我已经写了一个程序,用蒙特卡罗方法计算函数的定积分(比如sin(x))。然而,我认为我使用mt19937的方式是不正确的,或者代码中有另一个问题,因为它没有返回预期的结果。
下面是我的代码:
mt19937 RandomEngine(0);
uniform_real_distribution<double> RandomDouble(0.0,1.0);
double x = RandomDouble(RandomEngine);
int NumberOfSimulations;
cin >> NumberOfSimulations;
double SumOfValues=0;
for (int iSimulation = 0; iSimulation < (NumberOfSimulations -1 ); iSimulation++)
{
SumOfValues += sin(x);
}
SumOfValues /= NumberOfSimulations;
cout << "The integral's result is: " << SumOfValues << endl;你能告诉我为什么你的输出甚至不准确吗?
发布于 2020-11-14 23:28:10
您的程序在double x = RandomDouble(RandomEngine);中随机抽取一个样本,然后重复地将其正弦相加。
你需要在每次迭代中随机抽样。将double x = RandomDouble(RandomEngine);移动到循环中。
此外,for (int iSimulation = 0; iSimulation < (NumberOfSimulations -1 ); iSimulation++)似乎使用了错误的界限。对NumberOfSimulations-1样本求和,然后除以NumberOfSimulations。
https://stackoverflow.com/questions/64835427
复制相似问题