资源描述:
《龙贝格求 积分》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、龙贝格(Romberg)求积法1.算法理论Romberg求积方法是以复化梯形公式为基础,应用Richardson外推法导出的数值求积方法。由复化梯形公式可以化为=一般地,把区间[a,b]逐次分半k-1次,(k=1,2,……,n)区间长度(步长)为,其中mk=2k-1。记=由=从而=-(1)按Richardson外推思想,可将(1)看成关于,误差为的一个近似公式,因而,复化梯形公式的误差公式为-==(2)取=有-=(3)误差为的误差公式=+2.误差及收敛性分析(1)误差,对复化梯形公式误差估计时,是估计出每个子区间上的误差,然后将n个子区间上的误差相加作为
2、整个积分区间上的误差。(2)收敛性,记,由于=上面两个累加式都是积分和,由于在区间上可积可知,只要的分划的最大子区间的长度时,也即时,它们的极限都等于积分值。可见,只要在区间上的可积的条件满足,由复化梯形求积公式计算所得复化梯形值序列都收敛于实际积分值。3.算法:(1)、输入:a,b,epsilon(2)、令=b-a,计算=(3)、令k=2,=(4)、令=,计算(5)、forj=2,3,……,k(6)、if{输出;return;}(7)、k=k+1;=;跳转(4)(8)、结束4.实例用龙贝格算法计算积分值I=5.龙贝格求积源程序://Rombergmet
3、hodforIntegral//Projectnamehu1.cpp//Executablefilehu1.exe//Date:2004.12//ByHuBentao#include"stdafx.h"#include"stdio.h"#include"iostream.h"#include"math.h"#include"conio.h"#include"stdlib.h"#defineN120#defineN220doublefun(doublex){//被积函数设置return(8/(1+x*x));}voidRomberg(doublea,dou
4、bleb,double(*fun)(double),doubleepsilon){inti,j,k;doubleh=b-a,temp;doubleT[20][20];FILE*fp;if((fp=fopen("200402157.txt","w"))==NULL){//将运算的中间结果和最终结果保存到文件200402157.txtputs("openfileerror!");return;}fflush(stdin);fprintf(fp,"龙贝格求积计算的中间结果:");printf("龙贝格求积计算的中间结果:");T[1][1]=h
5、*((*fun)(a)+(*fun)(b))/2;fprintf(fp,"T[1][1]=%f",T[1][1]);printf("T[1][1]=%f",T[1][1]);k=2;h/=2;while(1){temp=0;for(i=1;i<=pow(2,(k-2));i++){temp+=(*fun)(a+(2*i-1)*h);}T[k][1]=temp*h+T[k-1][1]/2;fprintf(fp,"T[%d][1]=%ft",k,T[k][1]);printf("T[%d][1]=%ft",k,T[k][1]);for(j
6、=2;j<=k;j++){T[k][j]=T[k][j-1]+(T[k][j-1]-T[k-1][j-1])/(pow(4,j-1)-1);fprintf(fp,"T[%d][%d]=%ft",k,j,T[k][j]);printf("T[%d][%d]=%ft",k,j,T[k][j]);}j--;if((fabs(T[k][j]-T[k][j-1]))7、p,"%ft",T[k][j]);//积分值输出printf("积分结果tI(f)=");//cout<8、math.h"#include"conio.h"#include"stdlib.