摘要求函数在给定区间上的定积分,在微积分学中已给出了许多计算方法,但是,在实际问题计算中,往往仅给出函数在一些离散点的值,它的解析表达式没有明显的给出,或者,虽然给出解析表达式,但却很难求得其原函数。这时我们可以通过数值方法求出函数积分的近似值。在用近似值代替真实值时,遇到的问题就是近似值的代数精度是否足够。当代数精度不足够时,很显然提高插值函数的次数是一种方法,但是考虑到数值计算的稳定性,当次数过高时,会出现龙格现象,用增大n的方法来提高数值积代数精度是不可取的。因此,提出类似于分段插值,为了减少数值积分的误差,可以把积分区间分成若干个小区间,在每个小区间上采用低阶数值积分公式,然后把这些小区间上的数值积分结果加起来作为函数在整个区间上的近似值,这个就是复化数值积分的思想。本实验针对在每个小区间上利用梯型积分公式,即阶数为1,进行实验。关键词:龙格现象复化数值积分代数精度11、实验目的1)通过本次实验体会并学习龙贝格积分公式的优点。2)通过对龙贝格积分公式进行编程实现,提高自己的编程能力。3)用实验报告的形式展现,提高自己在写论文方面的能力。2、算法流程如果将区间[𝑎,𝑏]n等分,则复化梯形公式为∫𝑓(𝑥)𝑑𝑥≈𝑏a𝑇𝑛=ℎ2[𝑓(𝑎)+2∑𝑓(𝑥𝑘)+𝑓(𝑏)𝑛−1𝑘=1]现变步长,将区间[𝑎,𝑏]2n等分,则有∫𝑓(𝑥)𝑑𝑥=𝑏a∑∫𝑓(𝑥)𝑑𝑥𝑥𝑖𝑥𝑖−1=∑[∫𝑓(𝑥)𝑑𝑥𝑥𝑖−1/2𝑥𝑖−1+∫𝑓(𝑥)𝑑𝑥𝑥𝑖𝑥𝑖−1/2]𝑛𝑖=1𝑛𝑖=1≈∑ℎ22[𝑓(𝑥𝑖−1)+2𝑓(𝑥𝑖−12)+𝑓(𝑥𝑖)]𝑛𝑖=1=ℎ4[𝑓(𝑎)+2∑𝑓(𝑥𝑖)+𝑓(𝑏)𝑛−1𝑖=1+2∑𝑓(𝑥𝑖−12)𝑛−1𝑖=1]=12𝑇𝑛+ℎ2∑𝑓[𝑎+(𝑖−12)ℎ]𝑛𝑖=1令𝐻𝑛=ℎ∑𝑓[𝑎+(𝑖−12)ℎ]𝑛𝑖=1这时𝑇2𝑛=12𝑇𝑛+12𝐻𝑛对于复化Simpson公式,可以发现𝑆𝑛能表示为如下形式𝑆𝑛=13𝑇𝑛+23𝐻𝑛2将𝑇2𝑛和上式综合得到𝑆𝑛=4𝑇2𝑛−𝑇𝑛4−13、算法实例设I=∫41+𝑥210𝑑𝑥,用龙贝格积分公式求解积分,并设置精度。解:根据题意可知,积分上下限为0和1,在此题中我们设置精度为0.001,具体程序如下所示:/******************************龙贝格(Romberg)积分*******************************/#includestdafx.h#includeiostream#includemath.husingnamespacestd;constintnum(20);voidRomberg(doublea,doubleb,doubleepsion,doublef(doublex)){intm=1;intn=1;intk;doubleh;doubleep;doublep;doublexk;doubles;doubleq;doubleT[num];h=b-a;T[0]=0.5*h*(f(a)+f(b));ep=epsion+1.0;while((ep=epsion)&&(mnum)){3p=0.0;for(k=0;kn;k++){xk=a+(k+0.5)*h;//n-1p=p+f(xk);//计算∑f(xk+h/2),T}//k=0p=(T[0]+h*p)/2.0;//T`m`(h/2),变步长梯形求积公式s=1.0;for(k=1;k=m;k++){s=4.0*s;q=(s*p-T[k-1])/(s-1.0);T[k-1]=p;p=q;}ep=fabs(q-T[m-1]);m++;T[m-1]=q;n++;h/=2.0;}for(inti=0;im;i++){intj=1;if(!(i%j)){coutT[i]endl;}else{coutT[i];}j++;}}doubleg(doublex)4{doublef;f=4/(1+(x*x));returnf;}voidmain(){doublea=0;doubleb=0;doublen=0;cout请输入积分上下限和等分数endl;cout请输入积分下限a=;cina;cout请输入积分上限b=;cinb;cout请输入精度n=;cinn;doubleg(doublex);Romberg(a,b,n,g);}运行结果:54、对结果进行分析通过用编程实现对上例的求解,可以看出结果较为准确,而且逼近效果较好,但是由于用程序进行实现,存在计算误差。5、参考文献[1]秦新强.数值逼近.西安:西安理工大学出版社,2010