李涛 201226100108 计自1201
一、实验目的
●用复合辛普森公式计算积分,使误差不超过(注意所给积分特点,做出相应的处理后再计算)
二、实验步骤
1.算法原理
复合辛普森原理:
将区间划分为n等分,在每个子区间上采用辛普森公式,若记则得
●
●
记
●
●
称为复合辛普森求积公式,其余项为
●
于是当时,与复合梯形公式相似有
●
易知误差阶为,收敛性是显然的,实际上,只要则可得到收敛性,即
●
此外,由于中求积公系数均为正数,故知辛普森公式计算稳定。
2.算法步骤
复合辛普森:
首先将区间划分为n等分,在每个子区间上采用辛普森公式,若记则得
算法过程:
这里将辛普森公式写为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 = "<