这是我写的代码,数值分析书上说当步长h减半,复化Simpson误差减至原有误差的1/16说明这是对的,但是我的不行,达不到这个要求
#include
#include
double f(double x){//f函数
return exp(x)*cos(x);
}
double Simpson(double a, double b, int n){
double h = (b-a)/n, fa=f(a),fb=f(b),ss=fa+fb,x=a;//ss总和
double f0,f1;
for(int i = 0; i < n; i++){ //0<= k <= n-1
x+=h/2.0;//k+1/2
f0=f(x);
ss+=4.0*f0;
if(i>=1){
x+=h/2.0;//k+1/2+1/2
f1=f(x);
ss+=2*f1;
}
}
ss=h*ss/6.0;
return ss;
}
int main(){
int n; //区间等分数
double x=-12.0703463164;
double a = 0.000001,s,ss;
double b = 3.14159265358;
printf("n:");
scanf("%d",&n);
s=Simpson(a,b,n);
printf("answer = %f\n", s);
ss=fabs(x-s);
printf("误差:%f\n",ss);
return 0;
}