由xn?1,xn,yn,h明显地表示出来了,而向后Euler方法是隐式方法,计算yn?1时要解隐式方程(6)。通常解此方程用迭代法。因此计算较为麻烦,但比显式Euler方法精度要高。 (三)、?-法
将Euler方法公式与向后Euler方法公式作加权平均,得到如下公式:
??f?xn,yn???1???f?xn?1,yn?1???yxn?1?yn?h??? ?(n?0,1,2?) (7) ??y?x0??y0,称式(7)为初值问题(1)的??法公式。其中如y?x0??y0为初值条件。
1在此法中当??时,即
2h (8) yn?1?yn??f?xn,yn??f?xn?1,yn?1????2此时的??法称为梯形公式法。梯形公式也隐式格式,用起来要进行迭代,其计算公式为
h??k?k?1?y?y?f?xn,yn??fxn?1,yn?1???n?n?1?(k?0,1,2?) (9) 2???y?0??y?hf?x,y?,nnn?n?1??这里在应用本迭代法时,是先用Euler方法求初值yn+1的近似值yn+1??即:
0?? yn+1=yn?hf?xn,yn?
0然后将yn+1?0?替代梯形公式(8)中的yn+1得到的式(9)。
式(9)又称为预测校正公式。换言之,由Euler方法给出预测值,再用梯形法予以校正。很显然,当步长办取得适当小时,由Euler方法算出的值已是较好的近似。格式(9)收敛很快,通常只需一两次迭代即可满足精度要求,若需多次迭代,则应缩小步长h后再行计算。
梯形公式法比用向后Euler方法的迭代步长可以放宽一倍,它的总体截断误差为O?h2?,比Euler方法高一阶。但它每积分一步要计算二次函数值,这说明的精度的提高是以增加计算量为代价的。
(四)、改进欧拉法
为得到比欧拉法精度高的计算公式,在等式如果对方程(1)从xn到xn?1积分,得 y?xn?1??y?xn???xn?1xnf?t,y?t??dt (10)
- 7 -
右端积分中若用梯形求积公式近似,并用yn代替y(xn),yn?1代替y(xn?1),则得
h yn?1?yn??f?xn,yn??f?xn?1,yn?1??? (11) 2?称为改进欧拉法.
改进欧拉方法是隐式单步法,可用迭代法求解.用欧拉方法提供迭代初值,则改进欧拉法的迭代公式为
为了分析迭代过程的收敛性,将(11)式与(10)相减,得
(12)
,
于是有
,
式中L为f(x,y)对y满足Lipschitz常数,如果选取h充分小,使得
,
(k)则当k??时有yn?1?yn?1,这说明迭代过程(12)是收敛的.
例2 用改进的欧拉方法求解初值问题(1).
解 改进的欧拉公式为
仍取h?0.1,计算结果见下表.同例1中欧拉法的计算结果比较,改进欧拉法明显改善了精度.
表2 计算结果对比
- 8 -
0.1 0.2 0.3 0.4 0.5 1.0959 1.1841 1.2662 1.3434 1.4164 1.0954 1.1832 1.2649 1.3416 1.4142 0.6 0.7 0.8 0.9 1.0 1.4860 1.5525 1.6153 1.6782 1.7379 1.4832 1.5492 1.6125 1.6733 1.7321 (五)Runge—Kutta方法
德国数学家C.D.T.Runge(1856——1927)是数值方法发展史上具有里程碑作用的人物。1895年,他在Hanover发表了关于微分方程数值解法的经典论文《常微分方程数值解法》。此文成为常微分方程Runge—Kutta方法的发端。此后,Runge结合教学活动积极投身于发展一般的数值分析特别是各种实际应用中的Runge—Kutta方法(严格来说,此方法在Kutta作出工作后才能称作Runge—Kutta方法)。 Runge—Kutta方法是一种特殊的单步方法,事实上,这个方法可以看作在(xm,xm?1)上取若干条积分曲线的若干个点的切线斜率,再进行一次(或多次)算术(或加权)平均后产生的新斜率,再按这个斜率从(xm,ym)出发,以直线带曲线向前推进一步的过程。与Taylor展示法相比,Runge—Kutta方法不用增加微商f(x,y)的次数就可以得到较高的阶。Runge一Kutta方法除了在微分方程求解中扮演的传统角色外,人们发现相关类型的初值问题可以用Runge一Kutta方法或适合更一般问题的Runge—Kutta方法求解,比如Runge—Kutta方法被应用到了Hamilton系统中。
前面提到的几种数值解法的精度是很低的,下面给出高阶一步法——Runge—Kutta方法。它是最常用的一种数值解法,因为它相当精确、稳定、容易编程。Runge—Kutta方法至今仍然得到广泛地应用。 ①、二级二阶Runge—Kutta方法
由Runge—Kutta方法的思想,我们得到二阶Runge—Kutta公式为
- 9 -
?1?yn?1?yn??K1?3K2?,4???K1?hf?xn,yn?,??K2?hf?xn?2h,yn?2K1?.???33?? (? 13)
1?y?y??K1?K2?,n?n?12??K1?hf?xn,yn?,??K2?hf?xn?h,yn?K1?. ? (14) Runge—Kutta公式是在计算两次函数值的情况下,局部截断误差的阶最高是3,式(13)是允许函数f(x,y)任意变化情况下截断误差最小的二阶方法。要再提高阶就必须增加计算函数值的次数。上述式(14)又称为欧拉预估——校正公式。 ②、三级三阶Runge—Kuuta方法
两个常用的三阶Runge—Kuuta方法分别为:
1?y?y?h?2K1?3K2?4K3?,n?n?19??K1?f?xn,yn?,?11???K?fx?h,y?hK2nn1??,?22???33???K?fx?h,y?hKn2?,?n?344??? (15)
1?y?y?h?K1?4K2?K3?,n?n?16???K1?f?xn,yn?,??K2?f?xn?1h,yn?1hK1?,???22?????K3?f?xn?h,yn?hK1?2hK2?. (16)
这两个常用方法在解决实际问题中能够达到较低的精度要求。但是要更高精度要求的,我们必须了解更高阶的方法一四级四阶Runge—Kuuta方法。 ③、 四级四阶Runge—Kutta方法
这种方法在解决实际问题中常用。在这里,我们将公式进行导出,以熟悉其方法的实用过程。由于Runge—Kutta公式对初值问题(1)中的一般f(x,y)都适用,则它必然对特殊的f(x,y)=xy,f(x,y)=x或f(x,y)=y也适用。从而可以定出特定
- 10 -
的参数来,因此,这里采用的是一种待定系数法,来导出四级四阶显式Runge—Kutta公式,过程十分简单明了。 为了计算简单,令
h?Tn,xn?1?xn?h,
y(xn)近似值为yn,这样求解问题(1)的四阶显示Runge一Kutta公式为
??yn?1?yn?h?c1K1?c2K2?c3K3?c4K4?,?K1?f?xn,yn?,??K2?f?xn?ha2,yn?hb21K1?,??K3?f?xn?ha3,yn?hb31K1?hb43K2?,?
?K4?f?xn?ha4,yn?hb41K1?hb43K3?, 这里要求
a2?b21,a3?b31?b32,a4?b41?b42?b43. 由于Runge—Kutta公式的思想与数值积分
xn?1
?xf,yn?x?dx 相似。所以希望四阶显示Runge—Kutta公式对
y??x3,y?0??0 是精确的。这样,将(17)式应用于(19)式,就有
K1?x3n,
K322?(x3n?a2)?xn?3xna2?3x2na2?a32,
K3?(xn?a3)3?x3n?3x2na23?3xna3?a33,
K324?(xn?a4)?x3n?3x2na4?3xna4?a34,
yn?1?yn?(c1?c2?c3?c4)yn?h??c2a2?c3a3?c4a4?y??h2?1?c2?ca22?313422a233?ca44yn???h?6(ca33(4)2?2ca?3c3a)y4n4h.
与Taylor公式
- 11 -
17)
18)
19)
20)
( ( ( (

