实验 5 复合辛普森公式 李涛 201226100108 计自 1201 一、 实验目的  用复合辛普森公式计算积分dxx4802cos1, 使误差不超过-410 (注意所给积分特点,做出相应的处理后再计算) 二、 实验步骤 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 算法过程: 这里将辛普森公式写为 Sn()函数, 然后在 Solve()函数里依次计算 S1,S2,S4,S6.......当相邻的精度小于 eps 时退出循环, 则 S2n 保存结果。 三.程序代码 #include #include #define eps 1e‐6 using namespace std; double f(double x){ return sqrt(1+cos(x)*cos(x)); }//被积函数 double Sn(double a,double b,double n){ double h=(a+b)/(2*n); double sum=0; for(int k=1;k<=n;k++){ sum+=2*f(a+(2*k‐1)*h); sum+=f(a+2*k*h); } sum=(sum*2+f(a)‐f(b))*h/3; return sum; }//辛普森公式 double Solve(double a,double b){ int i=1; double S1n=Sn(a,b,i); double S2n=Sn(a,b,2*i); while(fabs(S1n‐S2n)>eps){ cout<<"n = "<