资源描述:
《龙贝格积分的程序实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、计算方法实验报告3【课题名称】龙贝格积分的程序实现【目的和意义】函数变化有急有缓,为了照顾变化剧烈部分的误差,我们需要加密格点。对于变化缓慢的部分,加密格点会造成计算的浪费。以此我们介绍一种算法,可以自动在变化剧烈的地方加密格点计算,而变化缓慢的地方,则取稀疏的格点。实际计算屮,由于要事先给出一个合适的步长往往很困难,所以我们往往采用变步长的计算方案,即在步长逐步分半的过程屮,反复利用复化求积公式进行计算,直到所求得的积分值满足精度要求为止。在步长逐步分半过程中将粗糙的积分值逐步加工为精度较高的积分值,或者说将收敛缓慢的梯形值序列
2、加工成收敛迅速的积分值序列。这种加速方法称为龙贝格算法。【计算公式】设表示复化梯形求得的积分值,其下标是等分数,由此则有递推公式其中U=就+££心』,其中“宁、訥由复化梯形公式的截断误差公式可得2/(/•)-「⑴=-'(§),I⑺-加f)=-⑴厂‘(〃)。12丄/z7由此可知,l^T2n--Tno这样导出的加速公式是辛普森公式:Sn=-T2n--Tn3333同理可得q=^S2n-^-SnRn=^C2n_^cn.由此便可得加速的算法:15156363龙贝格算法。【龙贝格求积算法流程图】定义被积函数f,积分上下限a,b和精度c定义一
3、个15x4的零矩阵,用于存放t值k>=15【龙贝格求积算法Matlab主程序】function[t]=rbg(f,a,b,c)%定义龙贝格积分函数,f为待积函数,a与b为积分上下限,C为精度控制;t=zeros(15,4);t(l/l)=(b-a)/2*(f(a)+f(b));%生成一零矩阵,用于存放t值;%由于矩阵行列值均从1开始,所以将原本的t(0,0)记为t(lzl),行列均加fork=2:4%先算出第一列的4个(包括t(l,l))值,以便程后面可以直接循环计算;sum=O;fori=l:2A(k-2)sum=sum+f(a
4、+(2*i-l)*(b-a)/2A(k-l));endt(k,l)=0.5*t(k-l,l)+(b-a)/2A(k-l)*sum;fori=2:kt(k』=(4FJ)*t(k,i・“t(kU))/(4Yi・l)J);endendfork=5:15%循环按照公式计算出t值;sum=0;fori=l:2A(k-2)sum=sum+f(a+(2*i-l)*(b-a)/2A(k-l));endt(k,l)=0.5*t(k-l,l)+(b-a)/2A(k-l)*sum;fori=2:4t(k,i)=(4A(i-l)*t(k/i-l)-t(k
5、-l/i-l))/(4A(i-l)-l);endifk>6%可知最小二分次数,防止假收敛;ifabs(t(k,4)-t(k-lz4))=15disp『不收敛]);%二分次数达15次仍不收敛;end【调用函数解题】f1sinxdxJoX由于被积函数sin(x)/x在积分下限0时函数值难定,故取积分下限为10八(-60)。调用函数解题如下:CommandWindow>>f=inlineCsin(x>/x*
6、,#)Inlinefunctionsf(x)=sin(x)/x>>formatlone»y=rbg(f,10*(-60),l,5»10e(-7))善案0.94608y=0.9207354924039480000.9397932848061770.946145882273587000.9445135216653900.9460869339517940.94608300406367400.9456908635827010.9460833108884720.9460830693509170.9460830703872230.945985
7、0299343860.9460830853849470.9460830703513790.9460830703672590.9460585609627680.9460830713055620.9460830703669360.9460830703671830.9460769430600630.9460830704258280.9460830703671790.94608307036718300000000000000000000000000000000