龙贝格积分

转自:http://blog.sina.com.cn/s/blog_5d66c29f0100fw3e.html

龙贝格积分对于编程实现来说,一开始不太好懂.

对于不易直接用积分公式计算的原函数,通常用 复合梯形求积公式或复合抛物线求积公式等方法,但这些方法精度不高,收敛的速度缓慢。为了提高收敛速度,减少计算量,人们寻求其他方法.
Romberg方法也称为逐次分半加速法。 它是在梯形公式、辛卜生公式和柯特斯公式之间的关系的基础上,构造出一种加速计算积分的方法。 作为一种外推算法, 它在不增加计算量的前提下提高了误差的精度.
在等距基点的情况下,用计算机计算积分值通常都采用把区间逐次分半的方法进行。这样,前一次分割得到的函数值在分半以后仍可被利用,且易于编程。

推导和证明资料:

http://www.docin.com/p-450311746.html

http://media.open.com.cn/media_file/rm/dongshi0703/jisuanffcb/text/chapter4.3.3/chapter4-3-3.htm

http://wenku.baidu.com/view/65c54b2458fb770bf78a5589.html

以下是一些对理解Romberg算法很关键的信息.


对区间[a, b],令h=b-a构造梯形值序列{T2K}。
T1=h[f(a)+f(b)]/2
把区间二等分,每个小区间长度为 h/2=(b-a)/2,于是
T2 =T1/2+[h/2]f(a+h/2)
把区间四(2 2)等分,每个小区间长度为h/2 2 =(b-a)/4,于是

T4 =T2/2+[h/2^2][f(a+h/4)+f(a+3h/4).

....................

把[a,b] 2 k等分,分点xi=a+(b-a)/ 2 k ·i (i =0,1,2 · · · 2k)每个小区间长度为(b-a)/ 2 k ,由归纳法可得下图的第一个公式.

龙贝格积分_第1张图片


整个程序就是循着这四个公式进行计算的.
Sn,Cn, Rn 分别代表特例梯形积分,抛物线积分,龙贝格积分.当然,编程的时候统一处理即可.
应用中,算到Rn级别即可(7阶的精度), 精度再高则会与累计误差相冲突.

下面举一个例,代码运行一下:取e=0.0001,用龙贝格方法计算积分

I = ∫01 ( 4/(1+X2)) dx
解 按上述五步计算,此处 f(x)=4/(1+x2) a=0 b=1 f(0)=4 f(1)=2
由梯形公式得
T1=1/2[f(0)+f(1)]=3
计算f(1/2)=16/5 用变步长梯形公式得
T2=1/2[T1+f(1/2)]=3.1
由加速公式得
S1=1/3(4T2-T1)=3.133333333

求出f(1/4) f(3/4) 进而求得
T4=1/2{T2+1/2[f(1/4)+f(3/4)]}
=3.131176471
S2=1/3(4T4-T2)=3.141568628
C1=1/15(16S2-S1)=3.142117648

计算f(1/8) f(3/8) f(5/8) f(7/8)进而求得
T8=1/2{T4+1/4[f(1/8)+f(3/8)+f(5/8)+f(7/8)]}
=3.138988495
S4=1/3(4T8-T4)=3.141592503
C2=1/15(16S4-S2)=3.141594095
R1=1/63(64C2-C1)=3.141585784


把区间再二分,重复上述步骤算得
T16=3.140941613 S8=3.141592652
C4=3.141592662 R2=3.141592640
由于 |R1-R2|<=0.00001,计算可停止,取R2=3.14159

题目:poj2369

你可能感兴趣的:(龙贝格积分)