我有以下代码,使用复合Simpson规则计算不正确的积分,我试图评估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;
}
答案 0 :(得分:1)
我认为您的问题是,您正在评估的函数f(double x)
未定义为x = 1,因为它等于exp(-1)/sqrt(1 - 1)
除以零,但是您正在调用{{1 }}在f(b)
的第一行中,当b为1时,您将返回无穷大。您可能希望将b设置为0.9999。如果使用更大的n值进行此处理以更接近实际曲线(例如n = 400),则将非常接近@macroland在Wolfram Alpha上找到的1.076的实际答案。