第八章 常微分方程的数值方法 ( numerical methods for ordinary differential equations ...
DESCRIPTION
第八章 常微分方程的数值方法 ( Numerical Methods for Ordinary Differential Equations ). 常微分方程分为 ( 1 )初值问题( 8.1 节 ) ( 2 )边值问题( 8.2 节 ). 8.1 初值问题的数值方法. 一阶常微分方程初值问题的一般形式是:. 称 f(x,y) 在区域 D 上对 y 满足 Lipschitz 条件是指:. - PowerPoint PPT PresentationTRANSCRIPT
第八章 常微分方程的数值方法( Numerical Methods for Ordinary
Differential Equations )
常微分方程分为( 1 )初值问题( 8.1 节 )( 2 )边值问题( 8.2 节 )
一阶常微分方程初值问题的一般形式是 :
0
( , ),(1)
( )
{( , ) , }
y f x y a x b
y a y
D x y a x b c y d
8.1 初值问题的数值方法
称 f(x,y)在区域 D 上对 y 满足Lipschitz条件是指 :
1 2 1 2
1 2
0 . .
( , ) ( , ) ,
[ , ], , [ , ]
L s t
f x y f x y L y y
x a b y y c d
利用 Picard逼近容易证明 : Th8.1.1 若 f(x,y)在区域 D 上连续 ,且对 y 满足 Lipschitz条件 ,则初值问题 (1) 在 [a,b]上存在唯一的连续可微解 y.
利用 Gronwall不等式易证解连续依赖于初值条件 :
( )1 2 1 2
Th8.1.2 ( , )
( ; ) ( ; ) .L x a
f x y D
y x s y x s e s s
设 在 上连续,且对y满足Li pschi tz条件,若y(x; s)是初值问题
y=f (x, y), a<x<b
y(a)=s
的解,则有
定理 8.1.2 的意义在于:若初值问题 (1) ,(2) 中的初始值有一微小扰动,则解的扰动也是微小的,也就是解连续依赖于初始条件.通常将具有这种特性的初值问题称为是适定的.
(稳定的)
数值解和精确解
用数值方法求解初值问题,不是求出它的解析解或其近似解析式,而是给出它的解在某些离散节点上的近似值
用 y(x)表示问题 (1), (2)的准确解
y(x0), y(x1),y(xN) 表示解 y(x)在节点 x0, x1,…, xN 处的准确值y0,y1,…,y N 表示数值解,即问题 (1), (2)的解 y(x) 在相应节点处的近似值,
单步法和多步法
单步法:在计算 yi+1 时只利用 y i
多步法:在计算 yi+1 时不仅利用 y i , 还要利用 yi−1, yi−2,…,
k 步法:在计算 yi+1 时要用到 yi,yi−1,…,yi−k+1
显式计算公式可写成 :yk+1=yk+hΦf(xk , yk;h)隐式格式 :yk+1=yk+hΦf ( xk , yk,yk+1;h)它每步求解 yk+1 需要解一个隐式方程
一 . Euler 方法
0 1 2 1
0
,
, , 1, 2, , .
N N
j
a x x x x x b
b ax x jh h j N
N
8.1.2 单步法
Euler方法是一种最简单的单步法
0 0
1
( ),
( , ), 0,1, , 1i i i i
y y x
y y hf x y i N
用差商近似导数h
xyxyxy
)()()( 01
0
x0 x1
),()()()( 000001 yxfhyxyhxyxy
)1,...,0(),(1 niyxfhyy iiii
继续这一过程,得到1 0 0 0( , )y y h f x y
记为
从而得到求解初值问题 (1), (2)的公式
Euler公式
局部截断误差
1
1
( , , ),
( ) [ ( ) ( , ( ), )]
i i i i
i i i i
y y h x y h
y x y x h x y x h
i +1
对于数值方法
:局部截断误差定义为e
定义 在假设 yi = y(xi) ,即第 i 步计算是精确的前提下,考虑的截断误差 Ri = y(xi+1) yi+1 称为局部截断误差 /* local truncation error */ 。
假定“ yi = y(xi)”称为局部化假定
估计局部截断误差的主要方法是 Taylor 展开法
定义 若某算法的局部截断误差为 O(hp+1) ,则称该算法有 p 阶精度。
Euler 方法的局部截断误差2
2
31 12
31 2
1( ) ( ) ( ) ( ) ( ), ,
3!
( ) ( ) ( , ( )) ( ) ( )
hi i i i i i i i
hi i i i i
y x y x hy x y x h y x x
y x y x hf x y x y x O h
2
1 1 1
32
( )
[ ( ) ( ) ( ) ( )] [ ( , )]
i i i
hi i i i i i
e y x y
y x hy x y x O h y hf x y
)()( 32
2
hOxy ih 欧拉法具有 1 阶精度。
二 . 改进的 Euler 方法
1
1
1 1
1
1 1 1
( ) ( ) ( , ( ))
[ ( , ( )) ( , ( ))]2
( , ),
[ ( , ) ( , ),2
0,1, , 1
i
i
x
i i x
i i i i
i i i i
i i i i i i
y x y x f x y x dx
hf x y x f x y x
y y hf x y
hy y f x y f x y
i N
因为
得到
改进的 Euler 方法的局部截断误差
2
1
3
( , )
( ) ( ) ( , ( )) [ ( , ( ))2
( , ( )) ( , ( ))] ( )
x y x y
i i i i x i i
y i i i i
y f x y
y f f y f f f
hy x y x hf x y x f x y x
f x y x f x y x O h
1
2
2
3
[ ( , ) ( , ) ( , )2
( , ) ( , ) ( )]
( , ) [ ( , ) ( , ) ( , )]2
( ).
i i i i i i x i i
i i y i i
i i i x i i i i y i i
hy y f x y f x y hf x y
hf x y f x y O h
hy hf x y f x y f x y f x y
O h
Eul er对于改进的 方法
8.1.2 一阶常微分方程初值问题的Runge-Kutta 方法
考虑一阶常微分方程初值问题
0
( , ), ,
( ) ,
y f x y a x b
y a y
1
1( ) ( ) ( , ( ))
( ) ( , ( ))
i
i
x
i i x
i
y x y x f x y x dx
y x hf y
1
( ) ( , ( ))n
i j i j i jj
y x h b f x c h y x c h
1
1n
jj
b
将区域 [a,b] 进行分划:0 , , 1, 2,..., .jx a x a jh j N
b ah
N
称为步长
若
则
1 1 1
2 2 2
( , ( ))
( , ( ))
......
( , ( )).
i i
i i
n i n i n
k f x c h y x c h
k f x c h y x c h
k f x c h y x c h
( , ( ))
( , ( ) ( ))
( , ( ) ( , ( )))
j i j i j
i j i j i
i j i j i i
k f x c h y x c h
f x c h y x hc y x
f x c h y x hc f x y x
1
1
( , )j
i j i jm mm
f x c h y h a k
-1
1
ja cjm j
m
11
1
1
1
,
( , ),
( , ), 2,3,...,
n
i i j jj
i i
j
j i j i jm mm
y y h b k
k f x y
k f x c h y h a k j n
n级显式 Runge-Kutta方法
1
1
j
jm jm
a c
二级 Runge-Kutta 方法取 n=2
1 1 1 2 2
1
2 2 2 1
( ),
( , ),
( , ).
i i
i i
i i
y y h b k b k
k f x y
k f x c h y c hk
( , ), ( , ), ( , ),
( , ), ( , ), ( , ),
i i x x i i y y i i
xx xx i i yy yy i i xy xy i i
f f x y f f x y f f x y
f f x y f f x y f f x y
记
由此得
1
2 2 2 1
22 1
2 31 1 2 2 2 1
,
( , )
( , ) ( ) ( ),
( ) ( ) ( )
i i
i i x y
i i x y
k f
k f x c h y c hk
f x y c h f k f O h
y y b b hf c b h f k f O h
另一方面
23
1
23
( , ) , ,
( ) ( ) ( ) ( ) ( )2
( ) ( )2
i i x y
i i i i
i x y
y f x y f y f f f
hy x y x hy x y x O h
hy hf f f f O h
为使局部截断误差为 ,应取
1 2
2 2
1
1
2
b b
c b
3( )O h
改进的 Euler 方法
• 取2 1 2
1, 1
2b b c
1 1 2
1
2 1
( / 2 / 2),
( , ),
( , ),
0,1,..., 1.
i i
i i
i i
y y h k k
k f x y
k f x h y hk
i N
中点方法
取 2 1 2
11, 0,
2b b c
1 2
1
2 1
,
( , ),
( , ),2 2
0,1,..., 1.
i i
i i
i i
y y hk
k f x y
h hk f x y k
i N
二阶 Heun 方法
取 2 1 2
3 1 2, ,
4 4 3b b c
1 1 2
1
2 1
1 3( ),4 4
( , ),
2 2( , ),
3 30,1,..., 1.
i i
i i
i i
y y h k k
k f x y
h hk f x y k
i N
二级 Runge-Kutta 方法不超过二阶
• 记
• 则
2, 2x y xx xy yyF f f f G f f f f f
2 2 32 2 2
1( )
2k f c hF c h G O h
• 因此局部截断误差只能达到
2 2 3 41 1 2 2 2 2 2
1( ) ( ),
2i iy y b b hf b c h F b c h G O h
2 34
1
2 34
( ) ( ) ( ) ( ) ( ) ( )2! 3!
( ) ( ).2 6
i i i i i
i y
h hy x y x hy x y x y x O h
h hy hf F G f F O h
3( ).O h
三级 Runge-Kutta 方法
取 n=3
1 1 1 2 2 3 3
1
2 2 2 1
3 3 31 1 32 2
3 31 32
( ),
( , ),
( , ),
( , ),
.
i i
i i
i i
i i
y y h b k b k b k
k f x y
k f x c h y c hk
k f x c h y a hk a hk
c a a
记 2, 2x y xx xy yyF f f f G f f f f f
2 2 2 1
2 2 32 2
( , )
1( )
2
i ik f x c h y c hk
f c hF c h G O h
31 1 32 2
2 2 33 2 32 2 32
1( )
2
a k a k
c f c a hF c a h G O h
3 3 31 1 32 2
3 31 1 32 2
2 23 3 31 1 32 2
2 331 1 32 2
2 2 33 2 32 3
( , )
[ ( ) ]
1[ 2 ( )
2
( ) ] ( )
1( ) ( )
2
i i
x y
xx xy
yy
y
k f x c h y a hk a hk
f h c f a k a k f
h c f c a k a k f
a k a k f O h
f c hF h c a F f c G O h
• 又由于
21 1 2 3 2 2 3 3
3 2 2 43 2 32 2 2 3 3
( ) ( )
1[2 ( ) ] ( ).
2
i i
y
y y b b b hf b c b c h F
h b c a Ff b c b c G O h
2 34
1( ) ( ) ( ),2 6i i y
h hy x y hf F G f F O h
因此要使局部截断误差为 O(h4) ,必须
1 2 3
2 2 3 3
2 22 2 3 3
3 2 32
1,
1/ 2,
1/ 3,
1/ 6.
b b b
b c b c
b c b c
b c a
Kutta 方法
取 1 2 3 2 3
32 31
1/ 6, 2 / 3, 1/ 6, 1/ 2, 1,
2, 1
b b b c c
a a
1 1 2 3
1
2 1
3 1 2
1 2 1( ),6 3 6
( , ),
1 1( , ),
2 2( , 2 ).
i i
i i
i i
i i
y y h k k k
k f x y
k f x h y hk
k f x h y hk hk
三阶 Heun 方法
• 取 1 2 3 2
3 32 31
1/ 4, 0, 3 / 4, 1/ 3,
2 / 3, 2 / 3, 0
b b b c
c a a
1 1 3
1
2 1
3 2
1 3( ),4 4
( , ),
1 1( , ),
3 32 2
( , ).3 3
i i
i i
i i
i i
y y h k k
k f x y
k f x h y hk
k f x h y hk
三级 Runge-Kutta 方法不超过三阶
• 完全类似于二级 Runge-Kutta 方法的分析 将 和 都展开到 项 易证 三级 Runge-Kutta 方法的局部截断误差只能达到4( ).O h
1iy 1( )iy x 4h
,,
四级 R-K 方法
取 n=4
1 1 1 2 2 3 3 4 4
1
2 2 2 1
3 3 31 1 32 2
4 4 41 1 42 2 43 3
3 31 32 4 41 42 43
( ),
( , ),
( , ),
( , ),
( , ),
, .
i i
i i
i i
i i
i i
y y h b k b k b k b k
k f x y
k f x c h y c hk
k f x c h y a hk a hk
k f x c h y a hk a hk a hk
c a a c a a a
2 2 3
31 32 3 41 42 43 4
1 2 3 4 2 2 3 3 4 4
2 2 2 3 3 32 2 3 3 4 4 2 2 3 3 4 4
3 2 32 4 2 42 3 43
2 2 23 32 4 42 43
3 2 3 32 4 4 2 42 3 43
4 2
, ,
1, 1/ 2,
1/ 3, 1/ 4,
( ) 1/ 6,
( ) 1/12,
( ) 1/ 8,
a a c a a a c
b b b b b c b c b c
b c b c b c b c b c b c
b c a b c a c a
b c a b c a c a
b c c a b c c a c a
b c a
32 43 1/ 24.a
经典 R-K 方法
1 1 2 3 4
1
2 1
3 2
4 3
( 2 2 ) / 6,
( , ),
( / 2, / 2),
( / 2, / 2),
( , ).
i i
i i
i i
i i
i i
y y h k k k k
k f x y
k f x h y hk
k f x h y hk
k f x h y hk
局部截断误差为 O(h5)
附注二阶 Runge-Kutta 方法的局部截断误差 只能达到三阶 Runge-Kutta 方法的局部截断误差 只能达到四阶 Runge-Kutta 方法的局部截断误差 只能达到五阶 Runge-Kutta 方法的局部截断误差 只能达到
3( );O h
4( );O h
5( );O h
5( ).O h