复化求积
来源:互联网 发布:淘宝怎么找指定客服 编辑:程序博客网 时间:2024/05/23 14:05
/*sinx [0,pi/2] */#include<stdio.h> #include<math.h>#define PI acos(-1)//圆周率; int n;//区间段数; double h;//步长; double f(double x){ return sin(x);}double FT(double a,double b)//复化梯形;{ double ans,x; int i; for(ans=0,i=1;i<=n-1;i++) { x=a+i*h; ans+=f(x); } ans=(ans*2+f(a)+f(b))*h/2.0; return ans;}double FS(double a,double b)//复化辛普森; { double ans,x,xk; int i; x=a;xk=x+h/2; ans=4*f(xk); for(i=1;i<=n-1;i++) { x=x+h; ans+=2*f(x); xk=x+h/2.0; ans+=4*f(xk); } ans+=f(a)+f(b); ans=ans*h/6; return ans;}double FC(double a,double b)//复化柯特斯; { double ans,x,x1,x2,x3; int i; x=a; x1=x+h/4; x2=x+h/2; x3=x+3*h/4; ans=32*f(x1)+12*f(x2)+32*f(x3); for(i=1;i<=n-1;i++) { x=x+h; ans+=14*f(x); x1=x+h/4; x2=x+h/2; x3=x+3*h/4; ans+=32*f(x1)+12*f(x2)+32*f(x3); } ans+=7*f(a)+7*f(b); ans=ans*h/90.0; return ans;}int main() { double a=0,b=PI/2.0; double ft,fs,fc; printf("输入区间划分数n:"); scanf("%d",&n); h=(b-a)/n; ft=FT(a,b);fs=FS(a,b);fc=FC(a,b); printf("复化梯形求积=%lf:\n",ft); printf("复化辛普森求积=%lf:\n",fs); printf("复化科特斯求积=%lf:\n",fc); return 0;}
0 0