You are on page 1of 95

第五章 常微分方程数值解

/* Numerical Methods for Ordinary Differential Equations */

 待求解的问题:一阶常微分方程的 初值问题 /* Initial-


Value Problem */:
 dy
 = f ( x, y) x ∈[a , b]
dx

 y (a ) = y0

解的存在唯一性 ( “常微分方程 ”理论):


只要 f (x, y) 在 [a, b] × R1 上连续,且关于 y 满足
Lipschitz 条件 ,即存在与 , yy) | 无关的常数
| f ( x , y ) − f ( xx, ≤ L| y − y | L 使
1 2 1 2

对任意定义在 [a, b] 上的 y1(x) 和 y2(x) 都成立,则上


述 IVP 存在唯一解。
如何求

解析解法:(常微分方程理论)
只能求解极少一类常微分方程;实际中给定的问题
不一定是解析表达式,而是函数表,无法用解析解
法。
数值解法 : 求解所有的常微分方

计算解函数 y(x) 在一系列节点 a = x0< x1<…< xn= b

处的近似值 yi ≈ y( xi ) ( i = 1, ... , n)

节点间距 hi = xi + 1 − xi ( i = 0, ... , n − 1)
为步长,通常采用等距节点 ,即取 hi = h ( 常数 ) 。
步进式:根据已知的或已求出的节点上的函数值计
算当前节点上的函数值,一步一步向前推进。因此
只需建立由已知的或已求出的节点上的函数值求当
前节点函数值的递推公式即可。
§1 Euler’s Method
§1 欧拉方法 /* Euler’s Method */
Taylor 展开
y ( xn +1) ≈ y ( x n ) + hy (′ x n ) 法
↑ y( xn) ≈ y n
y ( xn +1) ≈ y n+ 1 = y n + h f ( x n , y n )

yn +1 = yn + h f (xn , yn ) n= 0, 1,...

--------Euler’s Method
几何意义

几何直观是帮助我们
寻找解决一个问题的
思路的好办法哦
亦称为欧拉折线法
/* Euler’s polygonal arc method*/
§1 Euler’s Method
显然,这种近似有一定误差,
而且步长越大,误差越大,
如何估计这种误差 y(xn+1 ) − yn+1 ?

定义
   在假设 yn = y(xn) ,即第 n 步计算是精确的前提
下,考虑公式或方法本身带来的误差 : Rn = y(xn+1 ) − yn+1 ,
称为 局部截断误差 /* local truncation error */ 。

说明
§1 Euler’s Method

截断误差 : 实际上, y(xn)  yn , yn 也有误差,它对 yn+1


的误差也有影响,见下图。但这里不考虑此误差的影响
,仅考虑方法或公式本身带来的误差,因此称为方法误
差或截断误差。
局部截断误差的分析:由于假设 yn = y(xn) ,即 yn 准确,
因此分析局部截断误差时将 y(xn+1 ) 和 yn+1 都用点 xn 上
的信息来表示,工具: Taylor 展开。
 欧拉法的局部截断误差:
Rn +1 = (y xn 1) + −yn 1 +[ =(y x)n ′ hy(+ 2x)n
h2
′′ y(+ x3)n O(
Rn+1 的主项
− yn[ + xn (y]n ,
hf )
/* leading term */
= h2
2 y′′ xn ( O)+ 3h ( )
§1 Euler’s Method
定义
   若某算法的局部截断误差为 O(hp+1 ) ,则称该算法
有 p 阶精度。
 欧拉法具有 1
阶精度。
在第二章讨论牛顿插值公式时
介绍了差商的概念和性质,
各阶差商可以近似各阶导数,具有不同的精度,
且可以用函数值来表示。
上一章中数值微分的方法之一
就是用差商近似导数

在 xn 点用一阶向前 y (x n +1) −y (x n)
y ′(x n) ≈
差商近似一阶导数 h
y ( xn +1) ≈ y ( x n ) + hy (′ x n )
↑ y( xn) ≈ y n
Euler’s method
y ( xn +1) ≈ y n+ 1 = y n + h f ( x n , y n )
§1 Euler’s Method
 欧拉公式的改进

隐式欧拉法或后退欧拉法 /* implicit Euler
method or backward Euler method*/

xn+1 点向后差商近似导

y ( xn +1 ) − y ( xn )
y′( xn +1 ) ≈
h
y ( xn +1) ≈ y ( x n ) + hy (′ x n+ 1)
↑ y( xn) ≈ y n
y ( xn +1) ≈ y n+ 1 = y n + h f ( x n+ 1, y +n 1)

隐式或后退欧拉公

§1 Euler’s Method
由于未知数 yn+1 同时出现在等式的两边,故称为隐
式 /* implicit */ 欧拉公式,而前者称为 显式 /* explicit
*/ 欧拉公式。隐式公式不能直接求解,一般需要用
Euler 显式公式得到初值,然后用 Euler 隐式公式迭
代求解。因此隐式公式较显式公式计算复杂,但稳
 y n +1 = yn + h f (xn ,y n )
0
定性好(后面分析)。
 ( k +1)
y
 n +1 = y n + h f (x n+ 1 ,y (k )
n+ 1 )

yn( k++
1)
1 −
y+n 1 =h f −( k)
+ n+ 1 n 1,+ f +
x (y )xn 1(yn 1, )

LhL−(+ y )
k +1
≤ hL y− y≤+n ≤
( k)
n +1
1
(0)
+ 1
n y n 1
(k +
Q hL <
1, ∴ y →
n +1 y →
1)
(+∞
kn 1 )
在迭代公式中取极限,有
yn +1 =
yn +h f +xn +(1 yn ,1 )
yn( k+)1
因此的极限就是隐式方程的解
§1 Euler’s Method
几何意义 y
Pn+1
设已知曲线上一点 Pn (xn , yn ), 过 Pn y(x)
该点作弦线,斜率为 (xn+1 , yn +1 )
点的方向场 f(x,y) 方向 , 若步长 h
充分小,可用弦线和垂线 x=xn+1
的交点近似曲线与垂线的交点。 xn xn+1 x

见上图, 显然,这种近似也有一定误差,
如何估计这种误差 y(xn+1 ) − yn+1 ?
方法同上,基于 Taylor 展开估计局部截断误差。
但是注意,隐式公式中右边含有 f(xn+1 , yn +1 ) ,
由于 yn +1 不准确,所以不能直接用
y' (xn+1 ) 代替 f(xn+1 , yn +1 )
§1 Euler’s Method

 隐式欧拉法的局部截断误
差:
由微分中值定理,得
f ( xn +1 , yn+1 ) = f ( xn+1 , y ( xn+ 1 ) ) + f y ′ ( xn+ 1 , η ) yn+ 1 − y ( xn+ 1 )  ,
yn +1 y ( xn+1 )
η 在,之间;
h2
又 f ( xn +1 , y ( xn+1 ) ) = y ′ ( xn+1 ) = y ′ ( xn ) + hy ′′ ( xn ) + y′′′ ( xn ) + L
2
∴ yn +1 = hf y ′ ( xn+1 , η )  yn+ 1 − y ( xn+ 1 )  + y ( xn )
3
h
+ hy′ ( xn ) + h 2 y′′ ( xn ) + y′′′ ( xn ) + L
2

h2 h3
y ( xn +1 ) = y ( xn ) + hy ′ ( xn ) + y′′ ( xn ) + y′′′ ( xn ) + L
2 6
§1 Euler’s Method
从而
) y+n 1= hf y +x′ n( 1 , ηy+) x n−(1 + y)n 1 
Rn +1 =y (xn+ 1 −
h2 h3
− y ′′ ( x n−) y′′′ x(+n ) L
2 3

1 − hf ′ ( x , η ) R =− h2 h3
y −x′′n( ) y +′′′x n ( ) L
 y n +1
 n+ 1
2 3

1
( f ′( x )
2
= 1 + hf y′ ( xn +1 ,η ) + h 2
y n +1 ,η ) +L
1 − hf y′ ( xn +1 ,η )
1
( = 1 + x + x2 + L )
1− x
§1 Euler’s Method


( h +( f )  h2  h3
2
∴ Rn +1 = 1 +′ y(
hf xn η1 ),+ 2 ′ xn) 1 ,η L+  ′′ (+  ) y −xn ( ′′′) y Lx
 y

 2 3
h2 h3 
= − y′′ ( xn ) − ′f3y( x η ) , ( y ) xn ′′ ( y2) +xnL ′′ −
6 
+1n
2
h2
∴ Rn +1 ≈ − ′′y( x) n o2 (=h )
2

 隐式欧拉法的局部截断误差:
Rn +1 = y ( xn +1 ) − yn +1 = − y′′( xn ) +O( h3 ) h2
2

即隐式欧拉公式具有 1 阶精度。
§1 Euler’s Method

比较尤拉显式公式和隐式公式及其局部截断误差


式 yn +1 = yn + h f (xn , yn ) n= 0, 1,...

式 Rn +1 = y( xn +1) − yn 1+ =2 ′′y ( xn) +O( h )
h2 3

隐 yn +1 = yn + h f (xn+ 1 ,y n+ 1 )

公 Rn +1 = y( xn +1) − yn 1+ = − h2
2
′′y ( xn) +O( h )
3


§1 Euler’s Method

若将这两种方法进行算术平均,即可消除误差
的主要部分 /*leading term*/
而获得更高的精度 , 称为梯形法

 梯形公式 /* trapezoid formula—*/ 显、隐式两种算法的平均


h
yn +1 = yn + [ f ( xn , yn ) + f ( xn +1 , yn +1 )]
2

R
注: 的确有局部截断误差 n +1 = y ( xn +1 ) − y n +1 = O ( h3
)

即梯形公式具有 2 阶精度,比欧拉方法有
了进步。但注意到该公式是隐式公式,计算时不
得不用到迭代法,其迭代收敛性与欧拉公式相似

§1 Euler’s Method
梯形法的迭代计算和收敛性
 yn0+1 = yn + h f (xn ,yn )

 ( k +1) h
y
 n +1 = y n + 
f (x n ,y n +
) f (
x (k )
+n 1 +n 1 )
,y 
 2
h
yn( k++
1)
1 −
y+n 1 = f −
( k)
+ n+ 1 n 1,+ f +)xn 1(yn 1,
x (
y )
2
k +1
h hL  
≤ L y−n +1 ≤ ( k)
y +n≤1 L −+ y 
(0)
+
n 1 y
n 1
2 2  
2 hL (k +
当 时, h< < ∴1, → y → ∞1)
n +1 k (+n
y 1 )
L 2
在迭代公式中取极限,有
h
yn + f [xn y(+n , + f) +xn 1( yn ,1 )
yn +1 = ]
2
yn( k+)1
因此的极限就是隐式方程的解
§1 Euler’s Method
梯形法的简化计算
迭代计算量大,且难以预测迭代次数。为了控制计算量,
通常只迭代一次就转入下一点的计算。用显式公式作预测,梯形公式
作校正,得到如下预测校正系统,也称为改进尤拉法 :

 改进欧拉法 /* modified Euler’s method */


Step 1: y n+ 1 = y n + h f ( x n, y n)
先用显式欧拉公式作预测,算出
Step 2: 再将yn+ 1 代入隐式梯形公式的右边作校正,
得到 h
yn+ 1 = yn + [ f ( x n, y n) + f ( x n+ 1 , yn+ 1 )]
2
h
yn +1 = yn +  (f x, n y) n ( f+ xn, 1 yn+ h (f+ x,) n y) n
2
§1 Euler’s Method

注:此法亦称为预测 - 校正法 /* predictor-corrector method


*/ 。可以证明该算法具有 2 阶精度,同时可以看到
它是个单步递推格式,比隐式公式的迭代求解过程
简单。后面将看到,它的稳定性高于显式欧拉法。

h
yn +1 = yn + [ f ( xn , yn )+ f ( xn+ h, yn+ h f ( xn , yn )) ]
2
1
或 yn +1 = [ yn + hf ( xn , yn )+ yn+ hf ( xn 1+, yn +1 )) ]
2
 §1 Euler’s Method

 y p = yn + h f ( xn , yn )

或  yc = yn + h f ( xn +1 , y p )
 1
 yn +1 = ( y p + yc )
 2

几何解 尤拉
释 A 法
梯形法
Pn+1 =(A+B)/2
B 后退尤拉

xn xn+1
§1 Euler’s Method

Another point of view

 dy
 = f ( x, y) x ∈[a , b] x
dx y (x) =y 0+ ∫f t ,( y t ( dt) )

 y ( a ) = y0 x0

x1

令 x=x1, y (x 1) =y 0 + ∫f t ,( y t ( dt) )
x0

§1 Euler’s Method

 中点欧拉公式 /* midpoint formula */

y( x 2 ) − y( x0 )
中心差商近似导数 y′( x1 ) ≈
2h
y( x 2 ) ≈ y( x0 ) + 2h f ( x1 , y( x1 ))
x0 x1 x2

y i +1 = y i −1 + 2h f ( x i , y i ) i = 1, ... , n − 1

假设 yi −1 = y( xi −1 ), yi = y( xi ) Ri = y( x i + 1 ) − yi + 1 ,则可以
= O( h3 )
导出
即中点公式也具有 2 阶精度,且是显式的。
需要 2 个初值 y0 和 y1 来启动递推
过程,这样的算法称为 双步法 /* double-step
method */ ,而前面的三种算法都是 单步法
/* single-step method */ 。
§1 Euler’s Method
尤拉
几何解

中点法

后退尤拉

Another point of view
xn-1 xn xn+1
x
 dy
 = f ( x, y) x ∈[a , b] y (x) =y 0+ ∫f t ,( y t ( dt) )
dx x0

 y ( a ) = y0
x2

令 x=x2, y (x 2) =y 0 + ∫f t ,( y t ( dt) )
x
得 0

对右端积分采用中矩形公式即得中点公

§1 Euler’s Method
 预测 - 校正 - 改进系统
中点法具有二阶精度,且是显式的,与梯形公式精度相匹配,用中点
公式作预测,梯形公式作校正,得到如下预测校正系统 :

预测:yn +1 = yn −1 + 2h f ( xn , yn )
h
校正: yn +1 = yn + [ f ( xn , yn ) + f ( xn +1 , yn +1 ) ]
2
h3 (3)
yn −1 yn :
预测误差(设,准确) y ( xn +1 ) − yn +1 ≈ y ( xn )
3
h3 (3)
yn yn +1:
校正误差(设,准确) y ( xn +1 ) − yn +1 ≈ − y ( xn )
12

校正误差约为预测 y ( xn +1 ) − yn +1 1
≈−
误差的 1/4 y ( xn +1 ) − yn +1 4
§1 Euler’s Method

4
y ( xn +1 ) ≈ yn +1 + yn +1 预测误差和校正误
5 差的事后误差估计
4
y ( xn +1 ) − yn +1 ≈ − ( yn +1 − yn +1 ) 式
5

1
y ( xn +1 ) − yn +1 ≈ ( yn +1 − yn +1 )
5

利用上两式可以估计预测值和校正值与准确值的误差,
可以期望,利用这两个误差分别作预测值和校正值的补
偿,有可能提高精度。
设 pn,cn 分别为第 n 步的预测值和校正值,即 pn = yn , cn = yn
4
mn +1 = pn+1 − ( p n+1 − c n+ 1 )
改进:
5 此时 cn+1 未知
1 ,故用 pn -cn
yn +1 = cn+1 + ( pn+1 − c n+ 1 )
5
代替
§1 Euler’s Method
 预测 - 校正 - 改进 预测:pn +1 = yn −1 + 2hyn′
公式 4
改进:mn +1 = pn +1 − ( pn − cn )
5
计算:mn′ +1 = f ( xn +1 , mn +1 )
h
校正:cn +1 = yn + ( yn′ + mn′ +1 )
2
1
改进:yn +1 = cn +1 + ( pn +1 − cn +1 )
5
计算:yn′ +1 = f ( xn +1 , yn +1 )

注:利用该算法计算 yn+1 时,需要


yn , yn′ ,和,因此启动算法之前必须给出开始值和,
pn − cn yn −1 y1 p1 − c1
p1 − c1
y1可用其它单步法计算,一般取为。 0
summary
公式 局部截断误差 精度 显 稳定 步数
隐 性

尤拉显 1阶 显 差 单步
h 2 (2)
式公式 y ( xn )
2
尤拉隐
2
1阶 隐 好 单步
式公式 h (2)
− y ( xn )
2
梯形公 3 2阶 隐 差 单步
h (3)

y ( xn )
3
中点法 h3 (3) 2阶 显 好 二步
− y ( xn )
12
两个预测 -- 校正系
统 尤拉两步法和梯形公式
尤拉公式和梯形公式构 构成的预测 - 校正 - 改
成的预测 - 校正系统 进系统
预测:pn +1 = yn −1 + 2hyn′
4
改进:mn +1 = pn +1 − ( pn − cn )
预测:yn +1 = yn + hyn′ 5
计算:yn′ +1 = f ( xn +1 , yn +1 ) 计算:mn′ +1 = f ( xn +1 , mn+1 )
h
校正:yn +1 = yn + ( yn′ + yn′ +1 ) 校正:cn +1 = yn + 2 ( yn′ + mn′ +1 )
h
2
1
改进:yn +1 = cn +1 + ( pn +1 − cn +1 )
5
计算:yn′ +1 = f ( xn +1 , yn +1 )

HW: p.201 #1-5
证明中点法和梯形公式的精度为 2 阶
§2 Runge-Kutta Method

§2 龙格 - 库塔法 /* Runge-Kutta Method */

建立高精度的单步递推格式 : 在改进尤拉法和
尤拉两步法预测 - 校正系统中 , 预测公式都是单步
法 , 如果预测误差很小 , 则通过校正后得到的近似
值误差会更小 , 因此需要研究高精度的单步法 .

 1. Taylor 级数法
 dy
 = f ( x, y) x ∈[a , b]
IVP: dx 设其解为

 y ( a ) = y0
y=y(x)
由 Taylor 展开,

h2 h3
y ( xn +1 ) = y ( xn ) + hy ′ ( xn ) +
 2  6

y ′′ ( xn ) + y ′′′ ( xn ) + L (1)
§2 Runge-Kutta Method

y′ = f (x ,y ≡
) f (0)

∂f ∂ f dy ∂ f (0)
∂ f (0)
y′′ = + = + ≡f f (1)

∂x ∂ y dx ∂ x ∂ y
∂f ∂f (1) (1)
y′′′ = + f≡ f (2)
(2)
∂x ∂ y
L
( j −2) (−j 2)
∂f ∂f −
y ( j)
= + ≡
f f ( j 1)

∂x ∂y
L
§2 Runge-Kutta Method

要使公式具有 p 阶精度,则在 (1) 式中截取前


p+1 项,用 (2) 式计算各阶导数,即得下面
Taylor 公式:
2 p
h h ( p)
yn +1 = yn + hyn′ + yn′′ + L + yn (3)
2 p!

h p +1
y ( xn +1 ) − yn+1 ≈ y ( p +1)
( ξ ) , xn < ξ < xn+ 1
( p + 1) !
§2 Runge-Kutta Method

1. 由此看出,一种方法具有 p 阶精度公式对
不超过 p 次的多项式准确成立(局部截断误差
为 0 )。
这一等价条件也可以用来判断一种方法的精
2.Taylor
度。 公式 (3) 表面上看形式简单,但具体构
造时往往很困难,因为按 (2) 式求导,这一过程
可能很复杂。因此通常不直接用 Taylor 公式,
而借鉴其思想提出其它公式。
§2 Runge-Kutta Method

 2. Runge—Kutta Method

单步递推法的基本思想 是从 ( xn , yn ) 点出发,以
某一斜率 沿直线达到 ( xn+1 , yn+1 ) 点。欧拉法及其
各种变形所能达到的最高精度为 2 阶。
由微分中值定理,有

y ( xn+ 1 )− y ( xn )
h
= y′( xn θ + h) ( f = xn ( hθ, +y xn) ) *
h θ +k , 0

⇒ y xn+ 1( )y= xn ( * hk
) + (4)

k* 称为区间 [xn, xn+1 ] 上的平均斜率,只要知道平


均斜率,就可计算 y(xn+1 ). 因此只要对平均斜率提
供一种近似算法,则由 (4) 式可导出一种相应的
§2 Runge-Kutta Method


1. θ = 0, k *
≈f ( xn ,y( xn) ) 1 k= ⇒
Euler's formula
2. θ = 1, k *
≈f ( xn +1 ,(y xn 1+) ) k2 = ⇒
Euler's implicit form
k1 + k2
3. k ≈
*
⇒ Trapezoid formula
2
 k1 = f (x n,y n)


4. k2 = f( x + , y+n hk)1
n h


 k = (k 1+ k 2 ) 2
*

⇒modified Euler's method


§2 Runge-Kutta Method

由此看出,改进的尤拉公式用 xn 与 xn+1
两个节点的斜率的算术平均作为平均斜率,
xn+1 点的斜率通过已知信息 yn 来预测。

 考察改进的欧拉法,可以将其改写为

斜率
1 1  一定取 K1 , K2
y i +1 = yi + h K 1 + K 2 
2 2  的平均值吗?
K1 = f ( xi , yi )
K2 = f ( x i + h, y i + hK 1 )

步长一定是 h 吗?
即第二个节点一定
是 xn+1 吗?
§2 Runge-Kutta Method
 2 阶 Runge—Kutta Method
将改进欧拉法推广为:
yi + 1 = yi + h [λ 1 K 1 +λ 2 K 2 ]
K1 = f ( x i , yi )
K2 = f ( xi + ph, yi + phKy1 ′)′( x ) = d f ( x , y )
首先希望能确定系数  1 、 2 、 dx p ,使得到的算法格
yi = y( xi ) dy
式有 2 阶精度,即在 = f x ( x , y ) + f y ( x的前提假
, y)
dx
设下,使得Ri = y ( x i +1 ) − y i +1 = O ( h 3 )
= f x ( x, y ) + f y ( x, y) f ( x, y )
Step 1: 将 K2 在 ( xi , yi ) 点作 Taylor 展
开 K 2 = f ( xi + ph, yi + phK 1 )
= f ( xi , yi ) + phf x ( xi , yi ) + phK 1 f y ( x i , yi ) + O( h2 )
= y ′( x i ) + ph y ′′( x i ) + O ( h 2 )
Step 2: 将 K2 代入第 1 式,得到
λ1 y '  x i  λ 2 [ y '  x i  ph{ y
y i 1 = y i  h { ¿ ¿ ' '  x i O  h 2  ] }
¿ y i  λ 1   λ 2  h  y '  x i  λ 2  ph 2
y ' '  x i O  h 3 
§2 Runge-Kutta Method

Step 3: 将 yi+1 与 y( xi+1 ) 在 xi 点的泰勒展开作比


较 yi +1 = y i + (λ1 + λ2 )h y′( x i ) + λ2 ph 2 y′′( x i ) + O( h 3 )
h2
y( x i +1 ) = y( x i ) + hy′( x i ) + y′′( x i ) + O ( h 3 )
2
Ri = y( x i +1 ) − yi +1 = O( h3 )

1
这里有 3 个
λ1 + λ2 = 1 , λ2 p =
2
未知数,2
个方程。
存在无穷多个解。所有满足上式的格式统称为 2 阶龙
1
格 - 库塔格式。p = 1, λ1 = λ2 =
2
p=1/2,  1=0,  2=1, 变形尤拉公式。
§2 Runge-Kutta Method

注:二阶 Runge-Kutta 公式用多算一次函数值 f


的办法避开了二阶 Taylor 级数法所要计算的 f
的导数。在这种意义上,可以说 Runge-Kutta
方法实质上是 Taylor 级数法的变形。
Q: 为获得更高的精度,应该如何进一步推广

改进的 Euler 公式推广为二阶 Runge-Kutta 公
式带来这样的启示:
若在 [xn, xn+1 ] 上多预测几个点的斜率值,然
后将它们的算术平均作为平均斜率,则有可
能构造出具有更高精度的计算公式。
--------Runge-Kutta 方法的基本思想。
§2 Runge-Kutta Method
 高阶 Runge—Kutta Method
y + 1 = y + h [λ 1 K 1 + λ 2 K 2 + ... +λ K ]
i i m m

K1 = f ( x , y )
i i

K 2 = f ( x +α 2 h , y + β 21
hK 1 )
i i

K 3 = f ( x +α 3 h , y + β 31
hK 1

32
hK 2 )
i i

... ...

K = f ( x +α h, y + β hK +β hK + ... + β hK
m −1
)
m i m m 1 1 m 2 2 m m −1

其中 i ( i = 1, …, m ) , i ( i = 2, …, m ) 和
 ij ( i = 2, …, m; j = 1, …, i−1 ) 均为待定系
数,确定这些系数的步骤与前面相似。
§2 Runge-Kutta Method

 最常用为四级 4 阶经典龙格 - 库塔法 /* Classical


Runge-Kutta Method */ :
y i +1 h
= yi + 6 ( K 1 + 2 K 2 + 2 K 3 + K 4 )
K1 = f ( xi , yi )
K2 = f ( x i + h2 , yi + h2 K 1 )
K3 = f ( x i + h2 , yi + h2 K 2 )
K4 = f ( x i + h, y i + hK 3 )

 Gill 公式: 4 阶经典龙格 - 库塔公式的一种改进


yi +1 = yi h6+ ( K ( 2 + 2) − K(
1 2 2 )
+2 + K3 ) K4 +
K1 = (f i x, i y)
K2 = (f i x h2 + , i y h
2 + K)1
K3 = (f i x h2 + , iy
2− 1
2 + (
hK 1 1 +2 2 ) − hK)2

K4 = (f i x + h, y
i 2
2
− hK 2 1 +
2
2
( ) + hK)3
§2 Runge-Kutta Method

注:
 龙格 - 库塔法 的主要运算在于计算 Ki 的值,即计
算 f 的值。 Butcher 于 1965 年给出了计算量与可
达到的最高精度阶数的关系:
每步须算 Ki 的个数 2 3 4 5 6 7 n≥8
3 4 4 5
可达到的最高精度 O( h 2 ) O( h ) O( h ) O( h ) O( h ) O( h6 ) O( hn−2 )

 由于龙格 - 库塔法的导出基于泰勒展开,故精度
主要受解函数的光滑性影响。对于光滑性不太好
的解,最好采用低阶算法而将步长 h 取小。
§2 Runge-Kutta Method
 变步长的 Runge—Kutta
Method
Rn +1 ≈ch p +1y ( p+ 1) x( n )

Q: 由局部截断误差可以看出,步长 h 越小,局
部截断误差越小;但步长减小,在一定求解范围
(区间)内要完成的步数就增加了,步数增加会引
起计算量增大,导致舍入误差积累。因此要选取适
当的步长。
选择步长时要考虑两个问题:
1. 如何衡量和检验计算结果的精度

2. 如何根据所获得的精度处理步长

HW:
p.201 #6-8
§3 Convergency and Stability

§3 单步法的 收敛性与稳定性 /* Convergency and Stability


*/

前面介绍了两大类微分方程数值解法
:一类是用差商近似导数得到的尤拉系列公式
,另一类是基于平均斜率概念的 Runge—Kutta
公式。基本思想都是通过某种离散化手续,将
微分方程转化为差分方程(代数方程)来求解

Q1. 这种转化是否合理?要看差分问题的解 yn
当 h 0 时是否收敛到微分方程的解 y(xn), 即是
否成立
yn  y(xn) , h 0. ----- 收敛性问题
Q2. 实际计算时,由于舍入误差的影响,差分
§3 Convergency and Stability

 收敛性 /*
Convergency */
定义 若某算法对于任意固定的
    x = xi = x0 + i h ,当
h→0 ( 同时 i → ∞ ) 时有 yi → y( xi ) ,则称该算法是收
敛 的。  y′ = λ y
例: 就初值问题  考察欧拉
 y ( 0) = y 0
显式格式的收敛性。
λx
解: 该问题的精确解为y( x ) = y0 e
欧拉公式为 yi + 1 = yi + hλ yi = (1 + λ h) yi limy(1i += λ(1h+)1 /λλ hh=) ey0
i

h→ 0
对任意固定的 x = xi = i h ,有
y i = y0 (1 + λ h) xi / h = y0 [(1 + λ h)1 / λ h ]λxi
→ y0 e λxi = y( x i )

§3 Convergency and Stability

(1)
§3 Convergency and Stability

y
证明 : 设 表示当 yn =y(xn) 时, 由

n+1
公式 (1) 求得的结果,即
(
yn +1 = y ( xn ) + hϕ xn , y ( xn ) , h (2) )
则局部截断误差为
y ( xn +1 ) − yn+1 ≤ ch p +1
而整体截断误差为
en +1 = y ( xn+1 ) − yn+1 ≤ y ( xn+ 1 ) − yn+ 1 + yn+ 1 − yn+ 1
(2)-(1), 得
yn +1 − yn 1+ ≤ ( y ) xn y−n ϕ ( h +, ( xn ) y, ) xn ( h ϕ, ) x, n − yn h
≤ y ( xn ) y−n hL+ ( y ) xn
ϕ y(n1 − ) hL (= ) ϕ +y xn ( yn1 )
§3 Convergency and Stability
从而
en +1 ≤ ( 1 + hLϕ ) en + chp +1 ≤( 1 +hL ϕ) ( 1 +hL) ϕ en 1− +chp 1+  +chp 1+

= ( 1 + hLϕ ) en −1 +( 1 +hL ϕ) chp +1 +chp +1


2

L
en ≤ ( 1 + hLϕ ) e0 +( 1 +hLϕ) (+ 1 +hL)ϕ ( +1 +hL) ch
n n−1 n −2 0 p +1
L+ 
 ϕ

1 − ( 1 + hLϕ )
n

= ( 1 + hLϕ )
n
e0 + chp +1
− hLϕ

(+ 1 + hL )
n
−1
= ( 1 + hLϕ ) e0
n ϕ
chp

§3 Convergency and Stability
xn − x0 = nh ≤ T (= b − a)
当时,有

( 1 + hL ) ≤ ( e )
n hLϕ n TLϕ
ϕ ≤e

( ∀x ∈ R,1+ x ≤ e ,当时,
x ≥ −1 x
0 ≤ ( 1+ x ) ≤ e
n nx
)
TLϕ
TLϕ e −1
∴ en ≤ e0 e + e0 = 0
ch p, 而 ,

 c TLϕ 
∴ en ≤ h  p

 Lϕ
e −1( ) 

∴ y ( xn ) − yn = o(h p )
 Euler 法的收敛性 : §3 Convergency and Stability

(x,y)=f(x,y), 故当 f(x,y) 满足 Lipschitz 条件时,


尤拉法收敛;
§3 Convergency and Stability
 稳定性 /* Stability */
 y′( x ) = −30 y( x )
例: 考察初值问题
 y (0) = 1
在区间 [0, 0.5] 上的解。
An Engineer complains: "Math
分别用欧拉显、隐式格式和改进的欧拉格式计算数值
theorems are改进欧拉法
so unstable that −30 x
节点 x 欧拉显式i 欧拉隐式 精确解 y = e
解。 a small perturbation on the conditions
0.0 1.0000 1.0000 1.0000 1.0000
0.1 −2.0000will cause
2.5000×a 10
crash
−1 on2.5000
the conclusions!"
4.9787× 10−2
0.2 4.0000 6.2500× 10−2 6.2500 2.4788× 10−3
0.3 −8.0000 1.5625× 10−2 1.5626× 101 1.2341× 10−4
0.4 1.6000× 101 3.9063× 10−3 3.9063× 101 6.1442× 10−6
0.5 −3.2000× 101 9.7656× 10−4 9.7656× 101 3.0590× 10−7

What is wrong ??!


§3 Convergency and Stability
§3 Convergency and Stability

定义
   若某算法在计算过程中任一步产生的误差在以后
的计算中都逐步衰减,则称该算法是 绝对稳定的
/*absolutely stable */ 。
常数,可
以是复数
一般分析某算法的稳定性时,为简单起见,只考虑模型
方程或 试验方程 /* test equation */
y′ = λ y

当步长取为 h 时,将某算法应用于上式,并假设只在
初值产生误差ε 0 = y0 − y0 ,则若此误差
h =λ h
以后逐步衰减,就称该算法相对于 h 绝
对稳定 , 的全体构成绝对稳定区域。我们称算法 A
比算法 B 稳定 ,就是指 A 的绝对稳定区域比 B 的大

§3 Convergency and Stability
§3 Convergency and Stability
§3 Convergency and Stability
§3 Convergency and Stability

{
y i1= y i h [ λ 1 K 1 ... λ m K m ]
例:隐式龙格 - 库塔法K j = f  x i α j h , y i β j1 h K1 ...  β j m hKm 
 j=1 , ... , m
 yi + 1 = yi + hK1

其中 2 阶方法 K = f ( x + h , y + h K )
 1 i
2
i
2
1
的绝对稳定区域为
Img
而显式 1~ 4 阶方法的绝对稳
定区域为 Img
k=4 - 3

0 k=3
Re
k=2 -2

k=1
-1

-3 -2 -1 Re
无条件稳

注:一般来说,隐式欧拉法的绝对稳定性比同阶的显式法
的好。
§4 线性多步法 /* Multistep Method */

尤拉两步公式与尤拉单步公式相比
,使用两个节点上的已知信息将精度提高一
阶。可以设想,计算 y(xn+1 ) 时,充分利用前
面已经求出的节点上的 y 及 y’ 值的线性组
合来近似 y(xn+ 1) ,精度会大大提高。 ---- 线性
多步法的基本思想。
构造线性多步法有多种途径,这里介绍
两种:
基于数值积分的构造方法;
基于 Taylor 展开的构造方法。
当  1≠ 0 时,为隐式
线性多步法的通式可写为
公式 ; β −1f=0=则为显式
f (xj, yj )
j
: 公式。

yn+1 =α 0 yn +α 1 yn−1 + ...+α r yn−r + h(β −1 fn+1 +β 0 fn +β 1 fn−1 + ...+β r fn−r )

 基于数值积分的构造法

将 y′ = f ( x , y ) [ xn , xn+1 ] 在
上积分,得到 xn+1
y ( xn +1 ) − y ( xn ) = ∫ f ( x, y ( x))dx
xn
xn+1
只要近似地算出右边的积分I ≈ ∫ x f (x ,y (x ))dx n

yn +1 = yn + I ,则可通过
近似 y(xn+1 ) 。而 选用不同近似式 I ,可得到不同的计
算公式。例如利用左矩形积分公式得到尤拉公式;梯
一般地,利用插值原理所建立的一系列数值
积分方法也可以导出解微分方程的一系列计
算公式。运用插值方法的关键在于选取合适
的插值节点。假设已构造出 f(x,y(x)) 的插值多
项式 Pr(x), 则
xn+1 x+n
∫ ∫
f (x, y (x ))dx ≈
1
P r(x )dx
xn xn
xn+1
⇒ yn +1= yn+ ∫ xn
Pr (x )dx
§4 Multistep Method
 亚当姆斯显式公式 /* Adams explicit formulae */
( xn , fn ) ,( x−n1 , fn−1) L,
利用 r+1 个节点上的被积函数值 (, xn −r , f)n r−

构造 r 阶牛顿后插多项式 , 有 外推技术
j  −t 
r
/* extrapolation */
N r ( xn + th) = ∑ ( −1)   ∆ f n− j,
j

j =0  j Newton
插值余
x − xn
≤ t = 阶向前差分,
其中0表示 ≤ 1, ∆ j j 项
h
xn+1 x = xn +th 1 1
∫ xn
f ( x, y ( x)) dx =
0 r N∫ n( x + t h) h dt + r R n( x∫
0
t+h) h dt
r
 −t 
y=n ∑h+ (
1 1
yn +1 = yn + h∫ )∫ 1 −
j
N(r xn +t)h dt j
f n ∆j dt
0
j=0
0
 j 
r
 −t  j r
= yn +h∑ ∫ ∑
1
( 1) −   dt
j
− f∆n j yn= hα + j
j
fn− ∆j
j=0
0
 j  j 0 =

/*Adams 显式公式
j j
where α j is independent of n and r, 0 1
table 5-6, 1 1/2
1  −t 
α j = ∫ ( −1)  dt
j
p.181 2 5/12
0
 j 3 3/8
j j=i
r
j
 j
= ∑ ( −1)   f n −i
i
∆ f n− j
j
i
i =0 i
r 
r r j
 j r
j  r

∑ j f n − j = ∑ α j ∑( −1)   f n −i = ∑( −1) ∑   α j  f n −i = ∑ βri f n −i


i i
α ∆ j

j =0 j =0 i =0 i i =0  j =i  i   i =0

r
⇒ yn +1 =yn +h∑ β ri fn i −
i=0
1
局部截断误差为 Rr = y( xn+1 ) − yn +1 = h∫ Rr ( xn +th) dt
0

1 y ( r + 2) ( ξ n )
= h∫ ωr +1 ( t) dt =Br hr + 2 y( r +2) ( ξn)
0
( r + 1) !
≈ Br hr + 2 y( r +2) ( xn)

β ri
注: Br 与 yn+1 计算公式中 fn , …, fn−k 各项的 系数
均可查表得到 。 见下表。
r fn fn−1 fn−2 fn−3 … Br

0 1 1
2
3 1 5
1 −
2 2 12
23 16 5 3

2 12 12 12 8
55 59 37 9 251
− −
3 24 24 24 24 720


1 2
R ≈ h y′′( xn )
例 r = 0, yn +1 = yn +hfn , 2

h 5 3
r = 1, yn +1 = yn + (3 fn −fn 1− ) R ≈ h y′′′( xn )
2 12

常用的是 r = 3 的 4 阶亚当姆斯显式公式
h
y i +1 = y i + (55 f i − 59 f i −1 + 37 f i − 2 − 9 f i − 3 )
24

251 5 (5)
R≈ h y ( xn )
720
Adams 显式公式用( xn , fn ) ,( x−n1 , fn−1) L, ( , xn −r , f)n r−
作为插值节点,在求
积区间 [xn, xn+1 ] 上用插值函数 Nr(x) 近似
f(x,y(x)) ,而 xn+1 不在插值节点内,因此是一个
外推的过程。虽然公式是显式的,便于计算,
但效果并不理想,比如稳定性较差等。 ( xn+1 , fn +1) ,( xn , f)n L, ( , xn r 1−, +fn ) r 1 −
因此改用通过 r+1 个节点
的插值多项式 Nr(x) 近似 f(x,y(x)) ,由于 xn+1 是
其中一个插值点,因此是内插多项式,但导出
的公式是隐式的。
§4 Multistep Method
 亚当姆斯隐式公式 /* Adams implicit formulae */
利用 r+1 个节点上的被积函数值 fn+1 , fn , …, fn−r+1 构造
r 阶牛顿前插多项式。与显式多项式完全类似地可得到
一系列隐式公式。 j α *
r
 −t  j
yn +1 = yn + h∑ α
0
α j( 1) = ∫ − 
j
*
j
j
∆ f n 1, +j −
*
dt 0 1
j=0
−1
 j  1 -1/2
差分展开,得 2 -1/12
3 -1/24
r
j r
yn +1 = yn + h∑ β * ri fn 1, +i β* ri( 1)= − ∑
i
− 
*
αj
i=0 i
j i =
局部截断误差为 Rr = y( xn+1 ) − yn +1 = %Br hr + 2 y( r +2) ξ( n )

≈ B%hr + 2 y( r +2) ( x ) r n
注: B% β *
r 与 yn+1 计算公式中 fn+1 , …, fn+1 −k 各项的系ri

数 均可查表得到 。 见下表。

fi+1 fi fi−1 fi−2 ~


k … Br
0 1 1

2
1 1 小于
1
1 − Br
2 2 12
5 8 1 1
2 − −
12 12 12 24
9 19 5 1 19
3
− −
24 24 24 24 720


1 2
例 r = 0, yn +1 = yn +hfn +1 , R ≈ − h y′′( xn )
: 2
h 1 3
r = 1, yn +1 = yn + ( fn + fn 1+ ) R ≈ − h y′′′( xn )
2 12
较同阶显
常用的是 k = 3 的 4 阶亚当姆斯隐式公式 式稳定
h
y i +1 = yi + (9 f i +1 + 19 f i − 5 f i −1 + f i − 2 )
24

19 5 (5)
R≈− h y ( xn )
720
§4 Multistep Method
 亚当姆斯预测 - 校正系统
/* Adams predictor-corrector system */
注意:三步所用
Predicted
valuekpn+ 公式的精度必须
Step 1: 用 Runge-Kutta 法 计算前 个初值
1
相同。通常用经

Step 2: 用 Adams 显式计算预测值 典 Runge-Kutta 法
; 配合 4 阶 Adams
Step 3: 用同阶 Adams 隐式计算校正值 公式。
。 251 5 (5)
4 阶 Adams 显式公式的截断误差 y ( xn +1 ) − yn+1 ≈ 720 h y ( xn )
4为阶 Adams 隐式公式的截断误差 y (x n +1) −y n+ 1 ≈−
19 5 (5)
h y (x n)
720

y (x n +1) −y n+ 1 19
⇒ ≈−
y (x n +1) −y n+ 1 251
Corrected
value cn+1
251
y (x n +1) −y n+ 1 ≈− (y+ n −
1 +y n 1) 预测值与校
270 正值的事后
19
y (x n +1) − y n+ 1 ≈ ( y+n 1− y+n 1) 误差估计
270

251
y (x n +1) ≈y n+ 1 − (y+n − y n 1)
1 +
270
19 Modified
y ( xn +1) ≈ y n+ 1 + ( y n+ 1 − y n+ 1) value mn+1
270
Adams 显隐预测 - 校正 - 改进
系统 h
预测:pn +1 = yn + (55 f n − 59 fn −1 + 37 fn − 2 − 9 fn −3 )
24
251
改进:mn +1 = pn +1 − ( pn − cn )
270
h
校正:cn +1 = yn + (9 f n +1 + 19 fn − 5 fn −1 + fn − 2 )
24
19
改进:yn +1 = cn +1 + ( pn +1 − cn +1 )
270
§4 Multistep Method

Adams 4th -Order predictor-corrector Algorithm


To approximate the the solution of the initial-value problem
y' = f ( x , y ), a ≤ x ≤ b, y( a ) = y0
At (N+1) equally spaced numbers in the interval [a, b].
应为
Input: endpoints a, b; integer ci+1 − pvalue
N; (initial 但因
i+1 ), y0 . ci+1 尚
Output: approximation y未算出,只好用
at the (N+1) values of x.( ci − pi ) 取
Step 1 Set h = (b − a) / N ; x0 = a; y0 = y0; Output ( x0, y0 );
代之。
Step 2 For i = 1, 2, 3
Compute yi using classical Runge-Kutta method; Output ( xi , yi );
Step 3 For i = 4, …, N do steps 4-10
pi +1 = yi + h(55 f i − 59 f i −1 + 37 f i − 2 − 9 f i − 3 ) / 24
Step 5 ; /* predict */
m i +1 = pi +1 + 251(ci − pi ) / 270
Step 6 ; /* modify */
ci + 1 = yi + h(9 f ( xi + 1 , m i + 1 ) + 19 f i − 5 f i − 1 + f i − 2 ) / 24
Step 7 ; /* correct */
yi +1 = ci +1 − 19(ci +1 − pi +1 ) / 270
Step 8 ; /* modify the final value */
Step 9 Output ( xi+1 , yi+1 );
Step 10 For j = 0, 1, 2, 3
Set xi = xi+1 ; yi = yi+1 ; /* Prepare for next iteration */
Step 11 STOP.
§4 Multistep Method
当  1≠ 0 f 时,为隐式
j = f (xj, yj )
 基于泰勒展开的构造法 公式 ; β −1=0 则为显式
公式。
yn+1 =α 0 yn +α 1 yn−1 + ...+α r yn−r + h(β −1 fn+1 +β 0 fn +β 1 fn−1 + ...+β r fn−r )

将通式中的右端各项 yn−1, … ,
yn−k ; fn+1 , fn−1,
… , fn−k (y’n+1 , … , y’n−k) 分别在 xn 点作泰
勒展开 ,与精确解 y(xn+1 ) 在 xn 点的泰勒展
开作比较。通过令同类项系数相等,得到足以
确定待定系数 0, … , α r ; β −1, β 0, … , β r 的等
式,则可构造出线性多步法的公式。
r r r r
yn +1 = ∑αk yn− k + h∑ β k f−n k= ∑α k y−n +
k ∑β
h y ′
k− n k
k =0 k=− 1 =k 0 =−
k 1

yn −k = y ( xn− k ), yn−′ k = y ′ (x−n


设由展开,有 k ,) Taylor
( −kh ) ( kh )
j p +1
p

yn −k = ∑ yn +
( j)
yn ( p +1)+ L
j =0 j! ( p +1 )!
( −kh ) −( kh )
p j −1 p

yn′ −k =∑ yn ( j+) y +
+
( p 1)
L
j =1 ( j − 1) !
n
p!
 r  p
hj  r r

⇒ yn +1=  ∑αk  yn+ ∑ ∑ ( −k ) α k + ∑ −( k )
j j −1
 j βk y n ( j )
 k =0  j =1 j ! k= 1 =−
k 1 
h p +1  r r

∑ −( k ) α+k (+p 1∑
) −( k )β k y n+( p +1)
p +1 p
+  L
( p + 1) !  k =1 =−
k 1 
p
h j ( j) h p +1 ( p 1)+
y ( x n +1 ) = ∑ yn + yn + L
j =0 j ! ( p +1 )!
p +1
要使公式具有阶精度,即局部截断误差为
p o (h ),
yn +1 y ( xn+ 1 )
只要令与的前项相同即可,即 p +1
 r




k =0
αk = 1
 r r
 ( −k ) α + j
∑ ∑ −( k ) β k=
j j −1
=
j 1 2 L ,p
1,,,

 k =1
k
k=− 1

局部截断误差
为 p +1
h  r r

y ( xn +1 ) − yn 1+ ∑ (− ) ( ) p−1 ( ∑
+)
p +1 p ( p + 1)
= 1 kα− k β − Lyn
( p + 1) ! k =1
k
k 1 =− 
k
§4 Multistep Method
例:设 yn+1 =α 0 yn+α 1 yn−1 +α 2 yn−2 + h(β 0 y′n+β 1 y′n−1 +β 2 y′n−2 +β 3 y′n−3 )
确定式中待定系数  0, α 1, α 2, β 0, β 1, β 2, β 3, 使得公式
具有 4 阶精度。
yn −1 = yn − h ′yn 12+ 2h y′′n 16 − 3h yn′′′ 241 + 4h (y4 )n ( O)+5h
hyn+′ h
yn −2 =yn − 2 2 y−
2
n
′′ h 43y+′n3′′ h 23y+n4 (4)
O h( )5
yn′ −1 =y′n − hy ′′ n+ h12′′′y− 2
n h y
6 n +
1 3 (4)
O h (4
)
yn′ −2 =y′n − hy 2′′ n+ h 2′′′y−2
n h y +
4 3 (4)
3 n O h( 4
)
yn′ −3 =y′n − hy3′′ n+ h92′′′y− 2
n h y
2 n +
9 3 (4)
O h( 4
)
y ( xn +1 )= yn + h′ yn 12 + 2 h y′′n 16 +3 h yn ′′′241 4+ h( 4 )yn (+hy(x) n) = yn */
O5/*
α 0 + α1 + α 2 = 1
h( −α1 − 2α 2 + β 0 + β1 + β 2 ) = h 7 个未知数
h 2 ( 12 α1 + 2α2 − β1 − 2 β2 − 3 β3 ) = 12 h 2
h 3 ( − 16 α1 − 43 α 2 + 12 β1 + 2 β 2 + 92 β 3 ) = 16 h3
5 个方程
h4 ( 241 α1 + 23 α2 − 16 β1 − 43 β2 − 92 β3 ) = 241 h4
§4 Multistep Method
 令  1=α 2 Adams 显式公式
=
0 以 y′ n+1 取代 y′ n−3 ,并取 1 Adams 隐式公式
= α 2 =以
 0 yn−3 取代 y′ n−3 ,则可导出另一组 4 阶显式算
法,其中包含了著名的米尔尼 /* Milne */ 公式 (4 步 4
阶显式公式 ) 4h
yn +1 = yn −3 + (2 y′n − y′n −1 + 2 yn′ −2 )
3 取 5 1 (5) = 1, α 2 = 0
14 5 (5) 14
其局部截断误差为 R = h y 得到辛甫生 ≈(ξn) h y /* xSimpson ( n) , */ 公式
45 45
ξn ∈( xn , xn +)1与 Milne 公式匹配使用 ,
构成预测 - 校正系统
在区间 [xn−1, xn+1 ] 上积分,并
注:上式也可通过数值积分 导出,即将 y′ = f ( x , y )
用 Simpson 数值积分公式来近 xn+1
[似积分项,亦可得此
xn− 3 , xn 1在区间
+] y ( xn +1 ) = y ( xn− 3 ) + ∫ f ( x, y ( x ))dx ,
Simpson xn−3
f n , f n−公式。
1 , f n −2
上积分,得到

辛甫生 /* Simpson */ h
yn +1 = yn −1 + ( y′n +1 +4 y′n + yn′ 1−)
公式 3
再过
其局部截断误差为
1 5 1 5 (5)
R =− h y (ξn) h y x ∈
≈−
(5)
( nξ
), x (x n,
n n ) +1
90 90

Milne-Simpson 预测校正系统的局部截断误差
(14/450.31, -1/90  -0.01) 都比同价的 Adams 公式
(251/720 0.34, -19/720  -0.02) 小,计算量又比 4
阶 Runge-Kutta 公式少。缺点是 , 校正公式是弱
稳定的,即对某些问题来说,其稳定性不好。
Hamming 对 Simpson 公式的稳定性作了改进,得
到 Hamming 公式。
§4 Multistep Method

 Milne-Simpson 系统的缺点是稳定性差,为改善稳定
性,考虑另一种隐式校正公式:
yn +1 = α 0 yn + α1 yn −1 + α 2 yn − 2 + h (β −1 y n′ +1 + β 0 y n′ + β1 y ′n −1 )
要求公式具有 4 阶精度。通过泰勒展开,可得到 5
个等式,从中解出 6 1个未知数,则有 个自
由度。
哈明 /* Hamming */ 用 取 1的不同数值进行试验,发现当
1 = 1 得
 1 = 0 时,公式的稳定性较好,即: Simpson 公式
1 3h
yn +1 = (9 y n − y n −2 ) + ( y′n +1 +2 y′n − y′n −1)
8 8
其局部截断误差为
1 5 (5) 1 5 (5)
R = − h y (ξ n )≈ − h y (x n ) , ξ n∈ (x n ,x n +1)
40 40
注:哈明公式不能用数值积分方法推导出来。
Milne-Hamming 预测 - 校正 - 改进
系统
4h
预测:pn +1 = yn −3 + (2 yn′ − yn′ −1 + 2 yn′ − 2 )
3
112
改进:mn +1 = pn +1 − ( pn − cn )
121
1 3h
校正:cn +1 = (9 yn − yn − 2 ) + ( yn′+1 + 2 yn′ − yn′ −1 )
8 8
9
改进:yn +1 = cn +1 + ( pn +1 − cn +1 )
121
§5 微分方程组与高阶方程 /* Systems of Differential
Equations and Higher-Order Equations */

 一阶微分方程组 y′1 ( x ) = f1 ( x ,y1 ( x ), ... ,ym ( x ))


IVP 的一般形式为: ... ... ...
y′m ( x ) = f m ( x ,y1 ( x ), ... , ym ( x ))

初值 y1 (x0 ) = y1 , y2 (x0 ) = y2 , ... ,ym (x0 ) = ym


0 0 0

 y1   f1   y10 
 .   .   
     . 
将问题记作向量形式,令 y = . , f = . , y = .
 .   . 
0
 . 
: y  f   y0 
  m  m  m
 y′( x ) = f ( x , y )

 y ( x0 ) = y0 前述所有公式皆
适用于向量形式

§5 Systems of DE’s and Higher-Order Equations

 高阶微分方程

y(n)
= ′
f ( x , y , y , ... , y ( n −1 )
)
y (x 0 ) = a 0 , y′ (x 0 ) = a 1 , ... , y n (x 0 ) = a n −1
( −1 )

化作一阶微分方程组求解。

y1 = y , y2 = y′, ... , yn = y ( n −1)

 y1′ = y2 初值条件为:
 .. y1 ( x0 ) = a0
 .
 y2 ( x0 ) = a1
 y′n −1 = yn
 ...
 y′n = f ( x , y1 , ... , yn )
y n ( x 0 ) = a n −1
§6 边值问题的数值解 /* Boundary-Value Problems */
2 阶常微分方程边值问题
 y ′′ = f ( x , y , y ′) x ∈( a , b )

 y(a ) = α, y(b ) = β
每计算一个 (s)
 打靶法 /* shooting method */ 都必须解一个 ODE.
先猜测一个初始斜 y ϕ ( s0 )
率 y ′ (a) = s ,通过
解初值问题
斜率 = s0
 y′′ = f ( x , y , y′) β
 y ( x)
 y(a ) = a
 y′(a ) = s y(b) = ϕ (s) ϕ ( s1 )

斜率 = s1
找出 s* 使得 (s*) = β ,即
把问题转化为求方程  (s)
− β = 0 的根。 0 a b x
§6 Boundary -Value Problems
 有限差分法 /* finite difference method */
将求解区间 [a, b] 等分为 N 份,取节点 xi = a +
ih
(i = 0, …, N ) ,在每一个节点处将 y′ 和 y′ ′ 离
散化。
y ( x + h) − y ( x ) y ( x ) − y ( x − h)
− 2
h h h
y′′( x ) = − y ( 4 ) (ξ )
h 12
y ( x + h) − 2 y ( x ) + y ( x − h)
= 2
+ O ( h 2
)
h
y ( x + h) − y ( x − h)
y′( x ) = + O( h2 )
2h

 y i + 1 − 2 y i + y i −1 y i +1 − y i −1
 = f ( xi , yi , ) i = 1, ... , N − 1
 h 2
2h
 y0 = α , y N = β

You might also like