龙贝格算法

龙贝格积分

1. 算法原理

采用复化求积公式计算时,为使截断误差不超过ε,需要估计被积函数高阶导数的最大值,从而确定把积分区间[a , b ]分成等长子区间的个数n 。

首先在整个区间[a , b ]上应用梯形公式,算出积分近似值T1;然后将[a , b ]分半,对 应用复化梯形公式算出T2;再将每个小区间分半,一般地,每次总是在前一次的基础上再将小区间分半,然后利用递推公式进行计算,直至相邻两个值之差小于允许误差为止。

实际计算中,常用

T 2n -T n ≤ε

作为判别计算终止的条件。若满足,则取

I [f ]≈T 2n ;

否则将区间再分半进行计算,知道满足精度要求为止。

x +x 1h n

T 2n =T n +∑f (i -1i ) k

222n =2i =1又经过推导可知,,在实际计算中,取,则h =

b -a x i +x i +1b -a

=a +(2*i -1)

2k ,22k +1。所以,上式可以写为

T 2k +1

1b -a 2b -a

=T 2k +k +1∑f (a +(2i -1) k +1) 222i =1

T 1=

b -a

(f (a ) +f (b ) )2

k

开始计算时,取

龙贝格算法是由递推算法得来的。由梯形公式得出辛普森公式得出柯特斯公式最后得到龙贝格公式。

根据梯形法的误差公式,积分值将减至四分之一,即有

T n 的截断误差大致与h 2成正比,因此步长减半后误差

1-T 2n 1

≈1-T n 4

将上式移项整理,知

1

1-T 2n ≈(T 2n -T n )

3

由此可见,只要二分前后两个积分值

T n 和T 2n 相当接近,就可以保证计算保证结果计算

结果

T 2n 的误差很小,这种直接用计算结果来估计误差的方法称作误差的事后估计法。

1

(T 2n -T n )

T T 32n 按上式,积分值的误差大致等于,如果用这个误差值作为2n 的一

种补偿,可以期望,所得的

T =T 2n +

141

(T 2n -T n )=T 2n -T n 333

应当是更好的结果。

按上式,组合得到的近似值T 直接验证,用梯形二分前后的两个积分值

T n 和T 2n 按

式组合,结果得到辛普生法的积分值

S n 。

41

S n =T 2n -T n

33

4

h 再考察辛普森法。其截断误差与成正比。因此,若将步长折半,则误差相应的

减至十六分之一。即有

I -S 2n 1

≈I -S n 16

由此得

I ≈

161S 2n -S n 1515

不难验证,上式右端的值其实就等于和

C n ,S 就是说,用辛普生法二分前后的两个积分值n

S 2n ,在按上式再做线性组合,结果得到柯特斯法的积分值C n ,即有

C n ≈

161

S 2n -S n 1515 641C 2n -C n 6363

重复同样的手续,依据斯科特法的误差公式可进一步导出龙贝格公式

R n ≈

龙贝格积分法的计算公式如下:

b -a ⎧T =(f (a )+f (b )) ⎪1

2

⎪k

1b -a 2b -a ⎪T T f (a +(2i -1) ) , k =0, 1, 2, ⋯⋯k +1=k +∑⎪2

222k +1i =12k +1

1⎪

S =T +(T 2k +1-T 2k ) ,k =0, 1, 2,⋯⋯k k +1⎨22

4-1⎪

1⎪

C (S k +1-S 2k ) ,k =0, 1, 2, ⋯⋯k =S k +1+⎪22

42-12

⎪R =C +1(C -C ),k =0, 1, 2, ⋯⋯k +1 ⎪2k 2k +12k

43-12

2. 程序框图

3. 源代码

%龙贝格积分公式

function [T,n]=romberg(f,a,b,fa,fb,eps)

%f为被积函数,a 和b 为区间左右端点,fa 为函数在左端点的值,fb 为函数在右端点的值 %eps为精度要求

%返回近似积分结果T 和区间等分数n h=b-a;

R(1,1)=(h/2)*(fa+fb); n=1;err=1;J=0;k=0; while (err>eps) k=k+1;J=J+1;s=0; for i=1:n

s=s+feval(f,a+h*(2*i-1)/(2^k)); end

R(J+1,1)=R(J,1)/2+s*(h/(2^k)); for m=1:J

R(J+1,m+1)=R(J+1,m)+(R(J+1,m)-R(J,m))/(4^m-1); end if J

err=abs(R(J+1,1)-R(J,1)); else

err=abs(R(J+1,4)-R(J,4)); end n=2*n; end R

T=R(J+1,4); end

%复化辛普森求积

function s=simp(f,a,b,fa,fb,n)

%f为被积函数,a 、b 是积分区间的左右端点,fa 为函数在左端点的取值,fb 为函数在右端点的取值,n 为区间的等分数,s 为返回的积分近似值 h=(b-a)/n;

x=linspace(a,b,2*n+1); for i=2:2*n y=feval(f,x); end

s=(h/6)*(fa+fb+2*sum(y(3:2:2*n-1))+4*sum(y(2:2:2*n))); end

%复化梯形求积

function s=trap(f,a,b,fa,fb,n)

%f为被积函数,a 、b 是积分区间的左右端点,fa 为函数在左端点的取值,fb 为函数在右端点的取值,n 为区间的等分数,s 为返回的积分近似值 h=(b-a)/n;

x=linspace(a,b,n+1); for i=2:n y=feval(f,x); end

s=0.5*h*(fa+fb+2*sum(y(2:n))); end

%习题6.2 f1=@(x)1./(1+x);

[T1,n1]=romberg(f1,0,1,1,0.5,1.e-7) T1=vpa(T1,7)%有效数字为七位 f2=@(x)log(1+x)./(1+x^2);

[T2,n2]=romberg(f2,0,1,0,log(2)/2,1.e-7) T2=vpa(T2,7) f3=@(x)log(1+x)./x;

[T3,n3]=romberg(f3,0,1,0,log(2),1.e-7) T3=vpa(T3,7) f4=@(x)sin(x)./x;

[T4,n4]=romberg(f4,0,1,1,2/pi,1.e-7) T4=vpa(T4,7) f1=@(x)1./(1+x);

s11=vpa(trap(f1,0,1,1,0.5,8),7) s12=vpa(simp(f1,0,1,1,0.5,8),7) f2=@(x)log(1+x)./(1+x.^2);

s21=vpa(trap(f2,0,1,0,log(2)/2,8),7) s22=vpa(simp(f2,0,1,0,log(2)/2,8),7) f3=@(x)log(1+x)./x;

s31=vpa(trap(f3,0,1,0,log(2),8),7) s32=vpa(simp(f3,0,1,0,log(2),8),7) f4=@(x)sin(x)./x;

s41=vpa(trap(f4,0,1,1,2/pi,8),7) s42=vpa(simp(f4,0,1,1,2/pi,8),7)

4. 计算结果:

龙贝格积分

1. 算法原理

采用复化求积公式计算时,为使截断误差不超过ε,需要估计被积函数高阶导数的最大值,从而确定把积分区间[a , b ]分成等长子区间的个数n 。

首先在整个区间[a , b ]上应用梯形公式,算出积分近似值T1;然后将[a , b ]分半,对 应用复化梯形公式算出T2;再将每个小区间分半,一般地,每次总是在前一次的基础上再将小区间分半,然后利用递推公式进行计算,直至相邻两个值之差小于允许误差为止。

实际计算中,常用

T 2n -T n ≤ε

作为判别计算终止的条件。若满足,则取

I [f ]≈T 2n ;

否则将区间再分半进行计算,知道满足精度要求为止。

x +x 1h n

T 2n =T n +∑f (i -1i ) k

222n =2i =1又经过推导可知,,在实际计算中,取,则h =

b -a x i +x i +1b -a

=a +(2*i -1)

2k ,22k +1。所以,上式可以写为

T 2k +1

1b -a 2b -a

=T 2k +k +1∑f (a +(2i -1) k +1) 222i =1

T 1=

b -a

(f (a ) +f (b ) )2

k

开始计算时,取

龙贝格算法是由递推算法得来的。由梯形公式得出辛普森公式得出柯特斯公式最后得到龙贝格公式。

根据梯形法的误差公式,积分值将减至四分之一,即有

T n 的截断误差大致与h 2成正比,因此步长减半后误差

1-T 2n 1

≈1-T n 4

将上式移项整理,知

1

1-T 2n ≈(T 2n -T n )

3

由此可见,只要二分前后两个积分值

T n 和T 2n 相当接近,就可以保证计算保证结果计算

结果

T 2n 的误差很小,这种直接用计算结果来估计误差的方法称作误差的事后估计法。

1

(T 2n -T n )

T T 32n 按上式,积分值的误差大致等于,如果用这个误差值作为2n 的一

种补偿,可以期望,所得的

T =T 2n +

141

(T 2n -T n )=T 2n -T n 333

应当是更好的结果。

按上式,组合得到的近似值T 直接验证,用梯形二分前后的两个积分值

T n 和T 2n 按

式组合,结果得到辛普生法的积分值

S n 。

41

S n =T 2n -T n

33

4

h 再考察辛普森法。其截断误差与成正比。因此,若将步长折半,则误差相应的

减至十六分之一。即有

I -S 2n 1

≈I -S n 16

由此得

I ≈

161S 2n -S n 1515

不难验证,上式右端的值其实就等于和

C n ,S 就是说,用辛普生法二分前后的两个积分值n

S 2n ,在按上式再做线性组合,结果得到柯特斯法的积分值C n ,即有

C n ≈

161

S 2n -S n 1515 641C 2n -C n 6363

重复同样的手续,依据斯科特法的误差公式可进一步导出龙贝格公式

R n ≈

龙贝格积分法的计算公式如下:

b -a ⎧T =(f (a )+f (b )) ⎪1

2

⎪k

1b -a 2b -a ⎪T T f (a +(2i -1) ) , k =0, 1, 2, ⋯⋯k +1=k +∑⎪2

222k +1i =12k +1

1⎪

S =T +(T 2k +1-T 2k ) ,k =0, 1, 2,⋯⋯k k +1⎨22

4-1⎪

1⎪

C (S k +1-S 2k ) ,k =0, 1, 2, ⋯⋯k =S k +1+⎪22

42-12

⎪R =C +1(C -C ),k =0, 1, 2, ⋯⋯k +1 ⎪2k 2k +12k

43-12

2. 程序框图

3. 源代码

%龙贝格积分公式

function [T,n]=romberg(f,a,b,fa,fb,eps)

%f为被积函数,a 和b 为区间左右端点,fa 为函数在左端点的值,fb 为函数在右端点的值 %eps为精度要求

%返回近似积分结果T 和区间等分数n h=b-a;

R(1,1)=(h/2)*(fa+fb); n=1;err=1;J=0;k=0; while (err>eps) k=k+1;J=J+1;s=0; for i=1:n

s=s+feval(f,a+h*(2*i-1)/(2^k)); end

R(J+1,1)=R(J,1)/2+s*(h/(2^k)); for m=1:J

R(J+1,m+1)=R(J+1,m)+(R(J+1,m)-R(J,m))/(4^m-1); end if J

err=abs(R(J+1,1)-R(J,1)); else

err=abs(R(J+1,4)-R(J,4)); end n=2*n; end R

T=R(J+1,4); end

%复化辛普森求积

function s=simp(f,a,b,fa,fb,n)

%f为被积函数,a 、b 是积分区间的左右端点,fa 为函数在左端点的取值,fb 为函数在右端点的取值,n 为区间的等分数,s 为返回的积分近似值 h=(b-a)/n;

x=linspace(a,b,2*n+1); for i=2:2*n y=feval(f,x); end

s=(h/6)*(fa+fb+2*sum(y(3:2:2*n-1))+4*sum(y(2:2:2*n))); end

%复化梯形求积

function s=trap(f,a,b,fa,fb,n)

%f为被积函数,a 、b 是积分区间的左右端点,fa 为函数在左端点的取值,fb 为函数在右端点的取值,n 为区间的等分数,s 为返回的积分近似值 h=(b-a)/n;

x=linspace(a,b,n+1); for i=2:n y=feval(f,x); end

s=0.5*h*(fa+fb+2*sum(y(2:n))); end

%习题6.2 f1=@(x)1./(1+x);

[T1,n1]=romberg(f1,0,1,1,0.5,1.e-7) T1=vpa(T1,7)%有效数字为七位 f2=@(x)log(1+x)./(1+x^2);

[T2,n2]=romberg(f2,0,1,0,log(2)/2,1.e-7) T2=vpa(T2,7) f3=@(x)log(1+x)./x;

[T3,n3]=romberg(f3,0,1,0,log(2),1.e-7) T3=vpa(T3,7) f4=@(x)sin(x)./x;

[T4,n4]=romberg(f4,0,1,1,2/pi,1.e-7) T4=vpa(T4,7) f1=@(x)1./(1+x);

s11=vpa(trap(f1,0,1,1,0.5,8),7) s12=vpa(simp(f1,0,1,1,0.5,8),7) f2=@(x)log(1+x)./(1+x.^2);

s21=vpa(trap(f2,0,1,0,log(2)/2,8),7) s22=vpa(simp(f2,0,1,0,log(2)/2,8),7) f3=@(x)log(1+x)./x;

s31=vpa(trap(f3,0,1,0,log(2),8),7) s32=vpa(simp(f3,0,1,0,log(2),8),7) f4=@(x)sin(x)./x;

s41=vpa(trap(f4,0,1,1,2/pi,8),7) s42=vpa(simp(f4,0,1,1,2/pi,8),7)

4. 计算结果:


相关文章

  • 数值计算方法复习题4
  • 习题四 1. 确定下列求积公式中的特定参数,使其代数精度尽量高,并指明所构造出的求积公式具有的代数精度. 1.2. 3. 4. ( 1) (2) (3) , , , ,代数精度为 3: ,代数精度为 3: 或 , ,代数精度 2: : : ...查看


  • 龙贝格积分实验报告
  • 二.Romberg积分法 1.变步长Romberg积分法的原理 复化求积方法对于提高精度是行之有效的方法,但复化公式的一个主要缺点在于要事先估计出部长.若步长过大,则精度难于保证:若步长过小,则计算量又不会太大.而用复化公式的截断误差来估计 ...查看


  • 汽车质心侧偏角估计的研究现状及发展
  • 汽车质心侧偏角估计的研究现状及发展--林蕖黄超 汽车质心侧偏角估计的研究现状及发展 林 蕖黄 超 南京航空航天大学,南京,210016 摘要:阐述了汽车质心侧偏角估计对于汽车稳定性控制的重要意义.从量测仪器.估计算法.物理模型.轮胎模型四个 ...查看


  • 国标H型钢和剖分T型钢截面扭转惯性矩计算
  • 徐 翔, 等:国标H 型钢和剖分T 型钢截面扭转惯性矩计算 国标H 型钢和剖分T 型钢截面扭转惯性矩计算3 徐 翔 郝际平 (西安建筑科技大学 西安 710055) (G B/T11263-1998) 提供的截面, 应用数值分析和Matla ...查看


  • 勒贝格生平简介
  • 勒贝格生平简介 1875年6月28日生于法国的博韦:1941年7月26日卒于巴黎. 勒贝格的父亲是一名印刷厂职工,酷爱读书,很有教养.在父亲的影响下,勒贝格从小勤奋好学,成绩优秀,特别擅长计算.不幸,父亲去世过早,家境衰落.在学校老师的帮助 ...查看


  • 教学大纲(数学史)
  • <数学史>课程 教学大纲 一 课程说明 1. 课程基本情况- 课程名称:数学史 英文名称:A History of Mathematics 课程编号:2411220 开课专业:数学与应用数学专业 开课学期:第6学期 学分/周学时 ...查看


  • 复合函数的勒贝格可积性研究[1]
  • 2010年2月第29卷第t期 Jour.aZ of 重庆文理学院学报(自然科学版) ChongqingUniversity ofArts Feb..2010 VoL andSciences(NaturalScienceEdition) 29 ...查看


  • 电动汽车用永磁同步电机转矩脉动抑制方法综述_王硕
  • 第14卷第5期 电源学报 Vol.14No.5 总第201667期Sept. 文献标志码:A 2016年9月 电源学Supply 报Journal of Power 中图分类号:TM 921 DOI :10.13234/j.issn.209 ...查看


  • 棱镜机密文件:NSA的技术
  • 乔治·奥威尔的反乌托邦小说<1984>已经发行60多年了,如今这本小说再次登上了英国和美国的图书畅销榜.<1984>最近销量骤增的原因是一位前美国国家安全局的IT人员爱德华·斯诺登和他透露的互联网秘密监控系统.如果不 ...查看


热门内容