【发布时间】:2019-12-08 16:19:39
【问题描述】:
我有以下代码使用复合辛普森规则计算不正确的积分,我正在尝试评估积分exp(-x)/sqrt(1-x),其中a= 0 和b = 1,而n=6 或步骤=6。但是,当它应该是= 4.288
#include <cmath>
#include <iostream>
using namespace std;
double f(double x)
{
return exp(-x)/sqrt(1-x);
}
double simpson(double a, double b, double n)
{
double x0=f(a)+f(b);
double x1=0,x2=0;
double x=0;
double h=(b-a)/(n);
for(int i = 1 ; i <n;i++){
x=a+(h*i);
if(i%2==0)
{
x2=x2+f(x);
}
else
{
x1=x1+f(x);
}
}
return (h*(x0+2*x2+4*x1))/3;
;
}
int main(){
cout<<endl;
cout<<"The improper integral is: "<<simpson(0.00000009,1,6)<<" "<<endl;
cout<<endl;
}
【问题讨论】:
-
您是否在 x=1 处进行评估?从
h和n的定义看来你是。 -
它应该计算从下限 = 0 到上限 = 1 的积分,而 n=6
-
在 x=1 时,您的函数趋于无穷大。你需要保护它。
-
@macroland 但算法的目的不是计算不定积分吗?或其他可能的解决方案?
-
算法只是计算积分。只需给出一个公差,例如 1E-5 并从界限中减去。顺便说一句,n=6 似乎太少了。
标签: c++ algorithm math calculus