gpt4 book ai didi

c++ - 使用 MC 方法计算积分

转载 作者:行者123 更新时间:2023-11-28 05:07:50 28 4
gpt4 key购买 nike

我正在尝试编写一种算法,使用蒙特卡洛方法求解积分。然而对于给定的输入数据,计算结果与预期不同;我计算表达式 exp(-ax^2)a = 1 并且点在 [0.5, 1] 范围内。我期望得到的结果大约是 0.29,但我得到的结果是 0.11。也许有什么建议我做错了什么?

#include<iostream>
#define N 100000000
#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstdlib>

double pickPoint(double left, double right);
double functionE(double a, double x);

int main(){
srand(time(NULL));
double a;
std::cin >> a;
double leftBorder, rightBorder;
std::cin >> leftBorder >> rightBorder;
double result = 0;
for (int j = 0; j < N; j++){
result += functionE(a, leftBorder + pickPoint(leftBorder, rightBorder));
}
printf("%lf", (rightBorder - leftBorder) * (result / N));
return 0;
}

double pickPoint(double left, double right){
return left + (double)(rand() / (RAND_MAX + 1.0) * (right - left));
}

double functionE(double a, double x){
return exp((-a*pow(x, 2)));
}

最佳答案

result += functionE(a, leftBorder + pickPoint(leftBorder, rightBorder));

应该是

result += functionE(a, pickPoint(leftBorder, rightBorder));

你把边界推到了很远的地方。

关于c++ - 使用 MC 方法计算积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231085/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com