首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于均匀分布随机数的蒙特卡罗模拟

基于均匀分布随机数的蒙特卡罗模拟
EN

Stack Overflow用户
提问于 2020-11-14 23:20:47
回答 1查看 34关注 0票数 0

我已经写了一个程序,用蒙特卡罗方法计算函数的定积分(比如sin(x))。然而,我认为我使用mt19937的方式是不正确的,或者代码中有另一个问题,因为它没有返回预期的结果。

下面是我的代码:

代码语言:javascript
复制
    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;

你能告诉我为什么你的输出甚至不准确吗?

EN

回答 1

Stack Overflow用户

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64835427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档