【发布时间】:2019-12-08 11:59:33
【问题描述】:
算法:enter image description here
我正在尝试实现这个复合辛普森规则,它将计算以下积分:1/sqrt(x),结果应该是:2
但是,我不断收到错误的输出,例如 1.61663
#include <cmath>
#include <iostream>
using namespace std;
double f(double n)
{
return 1/sqrt(n);
}
double simpson(double a, double b, double n)
{
double x0=f(a)+f(b);
double h=(b-a)/(n);
double x1=0,x2=0;
double x=0;
for(int i = 1 ; i <n;i++){
x=a+(i*h);
if(i%2==0)
{
x2=x2+f(x);
}
else
{
x1=x1+f(x);
}
}
x1=(h*(x0+2*x2+4*x1))/3;
return x1;
}
int main(){
cout<<"Integral is: "<<" "<<simpson(0.0004,1,20)<<" "<<endl;
}
【问题讨论】:
-
你是不是忘了初始化一些变量,比如
x1和x2? -
默认初始化为0
-
没有。只有全局变量通过归零初始化。
-
完成但输出仍然相同
-
不应该将 x0 初始化为
f(a) + f(b)而不是乘以这些值吗?
标签: c++ algorithm math calculus