实验四 复合辛普森公式 一、 实验目的 1、 理解复合辛普森公式的方法原理; 2、 利用复合辛普森公式计算积分。 二、 实验步骤 1.算法原理 复合辛普森原理: 将区间],[ba划分为 n 等分, 在每个子区间 1,kkxx上采用 辛普森公式, 若记,2121hxxkk则得 k10)()(nbadxxfdxxfI ).()]()(4)([61021fRxfxfxfhnnkkkk  记 k1021)]()(4)([6nkkknxfxfxfhS ], )b()(2)(4)([6101121kknnkkfxfxfafh 称为复合辛普森求积公式, 其余项为 . )1,(),()2(180)(10) 4 (4knkkkknnxxfhhSIfR 于是当],[)(4baCxf时, 与复合梯形公式相似有 ),(),()2(180)() 4 (4bafhabSIfRnn 易知误差阶为4h , 收敛性是显然的, 实际上, 只要],[)(baCxf则可得到收敛性, 即 banndxxfS)(lim 此外, 由于n S 中求积公系数均为正数, 故知辛普森公式计算稳定。 2. 算法步骤 复合辛普森: 首先将区间],[ba划分为 n 等分, 在每个子区间1,kkxx上采用辛普森公式, 若记,2121hxxkk则得 k1021)]()(4)([6nkkknxfxfxfhS] )b()(2)(4)([6101121kknnkkfxfxfafh 3. 程序流程图 三. 程序代码 #include #include #include #define eps 0.000001 //计算精度 开始输入数据 a,b,n ] )b()(2)([2)]()([211101kknknkknfxfafhxfxfhT], )b()(2)(4)([61121nnkknfxfxfafhS , 0knabh , khaxk 结束nTIR1 ,n SIR221, RR输出1 kk float func(double x) //% func-- 求积函数(函数文件) { while(x==0) return 1; double y; y=(sin(x)/x); return(y); } double bsimpson(double a,double b) //% a, b -- 求积区间 { int i,n; double h,p,e,s; double t1,t2,s1,s2,x; n=1; h=b-a; t1=h*(func(a)+func(b))/2.0; s1=t1; /*用 t1 代替 s1*/ e=eps+1.0; while(e>=eps) { s=0.0; for(i=0;i<=n-1;i++) { x=a+(i+0.5)*h; s=s+func(x); } t2=(t1+h*s)/2.0; s2=(4*t2-t1)/3.0; e=fabs(s2-s1); t1=t2; s1=s2; n=n+n; h=h/2.0; } return(s2); } main() { double a,b,s; printf("input a,b="); scanf("%lf,%lf",&a,&b); s=bsimpson(a,b); printf("s=%lf\n",s); getch(); return 0; } 四、 心得体会 通过本次试验, 我理解复合辛普森公式的方法原理, 并且能利用复合辛普森公式计算积分, 在数值分析的理论知识上又有了较大的收获, 在进行编程的过程中, 我已经基本熟练了数值算法的程序过程, 能独立的在有限的时间内完成, 这对以后的学习会有很大的帮助。