摘要求函数在给定区间上的定积分,在微积分学中已给出了许多计算方法,但是,在实际问题计算中,往往仅给出函数在一些离散点的值,它的解析表达式没有明显的给出,或者,虽然给出解析表达式,但却很难求得其原函数。这时我们可以通过数值方法求出函数积分的近似值。在用近似值代替真实值时,遇到的问题就是近似值的代数精度是否足够。当代数精度不足够时,很显然提高插值函数的次数是一种方法,但是考虑到数值计算的稳定性,当次数过高时,会出现龙格现象,用增大n的方法来提高数值积代数精度是不可取的。因此,提出类似于分段插值,为了减少数值积分的误差,可以把积分区间分成若干个小区间,在每个小区间上采用低阶数值积分公式,然后把这些小区间上的数值积分结果加起来作为函数在整个区间上的近似值,这个就是复化数值积分的思想。本实验针对在每个小区间上利用抛物线积分公式,即阶数为2,进行实验。关键词:龙格现象复化数值积分代数精度复化抛物线积分公式1、实验目的1)通过本次实验体会并学习复化抛物线积分公式的优点。2)通过对复化抛物线积分公式进行编程实现,提高自己的编程能力。3)用实验报告的形式展现,提高自己在写论文方面的能力。2、算法流程已知定积分的抛物线积分公式及其误差为{∫abf(x)dx≈b−a6[f(a)+4f(a+b2)+f(b)]R2[f]=−(b−a)52880f4(η),η∈(a,b)根据数学知识,我们知道积分区间可划分,且不改变积分值,即如下所示:∫abf(x)dx=¿∑i=1n∫xi−1xif(x)dx¿针对上式,在每一个小区间上利用抛物线积分公式有∫xi−1xif(x)dx≈h6[f(xk−1)+4f(xk−12)+f(xk)]−h52880f4(Ek)得到∫abf(x)dx=∑k=1n∫xk−1xkf(x)dx¿∑k=1nh6[f(xk−1)+4f(xk−12)+f(xk)]−h52880∑k=1nf4(Ek)其中xk−1/2=12(xk−1+xk)=a+(k−12)h,令1Sn=∑k=1nh6[f(xk−1)+f(xk)+f(xk−1/2)]¿h6[f(a)+4∑k=1nf(xk−12)+2∑k=1n−1f(xk)+f(b)]当Sn作为积分的近似值时,其误差为Rn[f]=−(b−a)52880f4(Ek)¿−(b−a)h42880f(4)(E1)+f(4)(E2)+⋯+f(4)(En)n若f(x)∈C4[a,b],则由介值定理推得Rn[f]=−(b−a)42880f4(η),η∈(a,b)设M4=|f4(x)|a≤x≤bmax,得到误差限|Rn[f]|=(b−a)h42880|f4(η)|≤(b−a)h42880M4=(b−a)52880n4M4由上式可以进行计算精度控制。这样就给出了n+1点复化抛物线积分公式及其误差{∫abf(x)dx≈h6[f(a)+4∑k=1nf(xk−12)+2∑k=1n−1f(xk)+f(b)]R2[f]=−(b−a)h42880f4(η)=−(b−a)52880n4f4(η),η∈(a,b)3、算法实例用复化抛物线积分公式计算积分2I=∫0141+x2dx解:具体程序如下:#include"stdafx.h"#include#includeusingnamespacestd;constintnum(1000);voidmain(){doublea=0;doubleb=0;doubleh=0;intn=0;inti=0;doubleSn=0;doubleF1=0;doubleF2=0;doublex[num]={0};doubley[num]={0};cout<<"请输入积分上下限和等分数的一半"<>a;cout<<"请输入积分上限b=";cin>>b;cout<<"请输入等分数的一半n=";cin>>n;h=(b-a)/(2*n);for(i=0;i<2*n+1;i++){x[i]=a+h*i;y[i]=4/(1+x[i]*x[i]);}3for(i=1;i<2*n;i+=2){F1=F1+4*y[i];}for(i=2;i<2*n;i+=2){F2=F2+2*y[i];}Sn=h/3*(y[0]+y[2*n]+F1+F2);cout<<"积分结果为:Sn="<