第五章 常微分方程数值解
第五章 常微分方程数值解
5.1 引言 (基本求解公式 )§
5.2 Runge-Kutta法§
5.3 微分方程组和高阶方程解法简介§
本章要点 : 本章主要研究基于微积分数值解法的常
微分方程数值解 , 主要方法有
线性单步法中的 Euler方法 、 Simpson方法 、
Runge-Kutta方法
高阶微分方程和微分方程组的数值解法
5.1 引言 (基本求解公式 )§
在工程和科学技术的实际问题中 , 常需要求解微分方程
只有简单的和典型的微分方程可以求出解析解
而在实际问题中的微分方程往往无法求出解析解
在高等数学中我们见过以下常微分方程 :
??
?
=
≤≤=′
0)(
),(
yay
bxayxfy
??
?
=′=
≤≤′=′′
a)(,)(
),,(
0 ayyay
bxayyxfy
-----------(1)
-----------(2)
??
?
==
≤≤′=′′
nybyyay
bxayyxfy
)(,)(
),,(
0
-----------(3)
(1),(2)式称为初值问题 ,(3)式称为边值问题
??
?
==′
==′
20022122
10012111
)(),,(
)(),,(
yxyyyxfy
yxyyyxfy -----------(4)
另外 ,在实际应用中还经常需要求解常微分方程组 :
本课程主要研究问题 (1)的数值解法 ,对 (2)~(4)只作简单介绍
我们首先介绍初值问题 (1)的解存在的条件
定理 1. 条件 , 即满足如果 Lipschitzyxf ),(
, 均有使得正数 ],[, baxL ∈??
|||),(),(| 2121 yyLyxfyxf ?≤?
的解存在且唯一则初值问题 )1(
对于问题 (1),要求它的数值解
)(],[)( 节点上的一系列离散点在区间就是求未知函数 baxy
bxxxxa n =<<<<= L210
),,2,1()( nkyxy kk L=的近似值上函数值
的数值解就是问题而 )1(),,2,1( nkyk L=
??
?
=
≤≤=′
0)(
),(
yay
bxayxfy
-----------(1)
从 (1)的表达式
可以看出 ,求它的数值解的关键在于
数值计算问题)(xy′
中程或者它的等价的积分方 ∫+= x
a
dttytfyxy ))(,()( 0
的数值计算问题积分 ∫x
a
dttytf ))(,(
而数值微分或数值积分问题我们都已经学习过
一 、 基于数值微分的常微分方程数值解法
??
?
=
≤≤=′
0)(
),(
yay
bxayxfy -----------(1)
对于初值问题 (1)
在下列子区间上分别应用两点数值微分公式
bxxxxa n =<<<<= L210
为了讨论方便 ,假设以下节点为等距节点
khaxn abh k +=?= ,
[ ])()(1)( 01 xyxyhay ?=′ )(2 0xyh ′′?],[ 1xa
[ ])()(1)( 011 xyxyhxy ?=′ )(2 0xyh ′′+
[ ])()(1)( 121 xyxyhxy ?=′ )(2 1xyh ′′?],[ 21 xx
[ ])()(1)( 122 xyxyhxy ?=′ )(2 1xyh ′′+
[ ])()(1)( 1 jjj xyxyhxy ?=′ + )(2 jyh x′′?],[ 1+jj xx
[ ])()(1)( 11 jjj xyxyhxy ?=′ ++ )(2 jyh x′′+
--------(5)
(一 ) Euler公式
由 (5)式每组的前一半可得
)()()( 01 ayhxyxy ′+= )(2 0
2
xyh ′′+
)()()( 112 xyhxyxy ′+= )(2 1
2
xyh ′′+
)()()( 1 jjj xyhxyxy ′+=+ )(2
2
jy
h x′′+
LL
--------(6)
1,,1,0 ?= nj L
),(1 jjjj yxhfyy +=+
)(2)(
2
1 jj y
hhe x′′=
+ )(2
2
jxy
h ′′≈
--------(7)
记
)( jj xyy =
1,,1,0 ?= nj L
其中 )( 11 ++ ≈ jj xyy ),()( jjj yxfxy =′
(6)和 (7)式称为求解初值问题 (1)的 (前进 )Euler公式 和 误差项
由 (5)式每组的后一半可得
)()()( 11 ++ ′+= jjj xyhxyxy )(2
2
jy
h x′′?
记 ),(
111 +++ += jjjj yxhfyy
)(2)(
2
1 jj y
hhe x′′?=
+ )(2 1
2
+′′?≈ jxy
h
)( jj xyy =其中 )( 11 ++ ≈ jj xyy
--------(8)
--------(9)
(8)和 (9)式称为求解初值问题 (1)的 后退 Euler公式 和 误差项
式形公此类公式称为隐式右端含有注意 )(,)8( 1+jy
1,,1,0 ?= nj L
),()( 111 +++ =′ jjj yxfxy
式形公此类公式称为显公式右端不含而前进 )(,1+jyEuler
从 (6)或 (8)式不难看出 , jj yy 时只要用到前一个值在计算 1+
这种类型的方法称为单步格式或单步法
Euler方法的几何体现 :
)( jj xyhy ′+=
),(1 jjjj yxhfyy +=+
前进 Euler公式
)( 1+′+= jj xyhy
),( 111 +++ += jjjj yxhfyy
后退 Euler公式
0 1 2 3 4 5 6
-1.5
-1
-0.5
0
0.5
1
1.5
Euler1.m例 1. 公式求解初值问题用前进 Euler
??
???
=
≤≤?=′
1)0(
102
y
xyxyy
解 : yxyyxf 2),( ?=显然
1,1,10,0 00 ===== ybnax
由前进 Euler公式
),(1 jjjj yxhfyy +=+
nj ,,2,1 L=)2(
j
j
jj y
xyhy ?+=
1.0=h取
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
得 )2(
0
0
001 y
xyhyy ?+= 1.1)
1
021(1.01 =×?+=
)2(
1
1
112 y
xyhyy ?+= 1918.1)
1.1
1.021.1(1.01.1 =×?+=
依此类推 ,有
=],[ yx
前 进 Euler公 式
精 确 解
?
?
?
?
?
?
?
?
?
?
?
?
?
? 0 1.00000.1000 1.1000
0.2000 1.1918
0.3000 1.2774
0.4000 1.3582
0.5000 1.4351
0.6000 1.5090
0.7000 1.5803
0.8000 1.6498
0.9000 1.7178
1.0000 1.7848
由于后退 Euler公式是隐形公式 ,计算例 1将很麻烦
事实上大多数情况下用后退 Euler公式都较困难
),( 111 +++ += jjjj yxhfyy
),(1 jjjj yxhfyy +=+
11 ++ jj yyEuler 的预测值公式得到如果用前进
11 ++ jj yEulery 公式计算代入后退然后将
就可得到新的 Euler公式
0)( yay =?
?
?
???
?
--------(10)
1,,1,0 ?= nj L
此方法称为 预测 — 校正系统
用 Euler公式的预测 ——校正系统求解 例 1.例 2.
解 : 由 (10)式 ,有
)2(
0
0
001 y
xyhyy ?+= 1.1)
1
021(1.01 =×?+=
)2(
1
1
101 y
xyhyy ?+= 0918.1)
1.1
1.021.1(1.01 =×?+=
)2(
1
1
112 y
xyhyy ?+= 1827.1)
0918.1
1.020918.1(1.00918.1 =×?+=
)2(
2
2
212 y
xyhyy ?+= 1763.1)
1827.1
2.021827.1(1.00918.1 =×?+=
Euler1.m
依此类推 ,得
?
?
?
?
?
?
?
?
?
?
?
?
?
? 0 1.00000.1000 1.0918
0.2000 1.1763
0.3000 1.2546
0.4000 1.3278
0.5000 1.3964
0.6000 1.4609
0.7000 1.5216
0.8000 1.5786
0.9000 1.6321
1.0000 1.6819
=],[ yx
比较不同的结果
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
前 进 Euler公 式
改 进 Euler公 式
精 确 值
校正系统预测 ?
(二 ) 常微分方程数值解的截断误差
评价一个微分方程求解公式的标准当然是其精度
:)( 11 的差与计算值也就是精确值 ++ jj yxy
)()( 111 heyxy jjj +++ =?
而在求解公式 中),(1 jjjj yxhfyy +=+
误差项1,,1,0 ?= nj L
)( jjj xyyy ≈都是近似值 , 即一般
步的误差只能表示求解公式第 1)()( 111 +?= +++ jyxyhe jjj
定义 1.
部截断误差
步的局的求解公式第为计算称 jyyxyhe jjjj ?= )()(
因为一般情况下 ,求解公式的每一步都存在误差 ,因此有
定义 2. 且步的截断误差的求解公式第为计算设 ,)( jyhe jj
∑
=
=
k
j
jk hehE
1
)()(
步的累计截断误差为该求解公式第则称 khEk )(
点上的总体截断误差即该求解公式在 kx
定义 3. )()( 1+= pj hOhe误差为若求解公式的局部截断
阶精度则称该求积公式具有 p
-2 -1.8 -1.6 -1.4 -1.2 -1 -0.8 -0.6 -0.4 -0.2 0
0
0.5
1
1.5
2
2.5
3210 xxxx
)(
)(
1
1
2
2
xy
y
xy
y
)(1 he
)(2 he
)(3 he
)(1 hE
)(2 hE
)(3 hE
Euler公式的局部截断误差为 )(2)(
2
1 jj y
hhe x′′=
+
具有 1阶精度
后退 Euler公式的局部截断误差为 )(2)(
2
1 jj y
hhe x′′?=
+
也具有 1阶精度
显然一个求解公式的精度越高 ,计算解的精确性也就越好
从前面的分析可知 ,Euler法的精度并不算高
因此有必要找寻精度更高的求解公式
二 、 基于数值积分的常微分方程数值解法
??
?
=
≤≤=′
0)(
),(
yay
bxayxfy -----------(1)
对于初值问题
上积分对上式在区间 ],[ 1 kk xx ?
∫ ?+= ? kkxxkk dxyxfxyxy 1 ),()()( 1 -----------(11)
∫ ?? kkxxkk dxyxfxyxy 1 ),()(,)( 1 就要求计算积分则计算已知假设
∫∫ ?? =′ kkkk xxxx dxyxfdxy 11 ),(
:),(
1
的计算∫
?
k
k
x
x
dxyxf
),(),( 11
1
??≈∫
?
kk
x
x
yxhfdxyxfk
k
矩形求积公式
))](,(),([2),( 11
1
kkkk
x
x
xyxfyxfhdxyxfk
k
+≈ ??∫
?
已知假设 11 )( ?? = kk yxy
梯形求积公式 ,误差为
))](,())2(,2(4),([6),( 1111
1
kkkkkk
x
x
xyxfhxyhxfyxfhdxyxfk
k
++++≈ ????∫
?
Simpson求积公式 ,误差为
将以上求积公式代入 (11)式 ,并加以处理就
可得到相对应的求解公式
))(,(12)(
3
kkk yf
hTR hh′′?=
))(,(16180)( )4(
5
kkk yf
hSR hh
×?=
(一 ) 矩形求解公式
∫ ?+= ? kkxxkk dxyxfxyxy 1 ),()()( 1
),(),( 11
1
??≈∫
?
kk
x
x
yxhfdxyxfk
k
由
可得 ),()( 111 ??? +≈ kkkk yxhfyxy
令 ),( 111 ??? += kkkk yxhfyy -----------(12)
(12)式称为 矩形公式 (矩形法 )
实际上就是 Euler求解公式
(二 ) 梯形求解公式
∫ ?+= ? kkxxkk dxyxfxyxy 1 ),()()( 1由
))](,(),([2),( 11
1
kkkk
x
x
xyxfyxfhdxyxfk
k
+≈ ??∫
?
可得 )])(,(),([2)( 111 kkkkkk xyxfyxfhyxy ++≈ ???
)],(),([2 111 kkkkkk yxfyxfhyy ++= ???令 ------(13)
称 (13)式为 梯形求解公式 (梯形法 )
注意 :(13)式是隐形公式
))(,(12)()(
3
kkkk yf
hTRhe hh′′?=≈
)()13( 11 ?? = kk xyy式中如果在
则梯形公式第 k步的截断误差为
)(12
3
ky
h h′′′?= ],[
1 kkk xx ?∈h)( 3hO=
显然梯形法具有二阶精度
由于梯形公式为隐形公式 ,一般情况下不易显化
kk yyEuler 的预测值求出矩形法公式可以先使用 )12)((
即进行校正代入梯形公式然后将 ,)13(ky
),( 111 ??? += kkkk yxhfyy
)],(),([2 111 kkkkkk yxfyxfhyy ++= ???
------(14)
以上公式称为改进的 Euler求解公式 (改进 Euler法 ),即
)],(),([2 111 kkkkkk yxfyxfhyy ++= ???
))],(,(),([2 111111 ?????? +++= kkkkkkk yxhfyxfyxfhy
------(15)
例 3. 用 Euler公式 、 梯形公式和改进 Euler公式求
解初值问题 ,并比较结果的精度
1)0(
]5.0,0[,
=
∈?==
y
xydxdy
解 : 1.0=h取步长
(1)Euler公式 11 ?? ?= jjj hyyy
)(2)( 1
2
?′′≈ jj xy
hhe )(
2 1
2
?′?= jxy
h
1
2
2 ??= jy
h
001 hyyy ?= 9.0= 0
2
1 2|)(| y
hhe = 2105.0 ?×=
112 hyyy ?= 81.0= 1
2
2 2|)(| y
hhe = 21045.0 ?×=
223 hyyy ?= 729.0= 2
2
3 2|)(| y
hhe = 210405.0 ?×=
334 hyyy ?= 6561.0= 3
2
4 2|)(| y
hhe = 2103645.0 ?×=
445 hyyy ?= 59049.0= 4
2
5 2|)(| y
hhe = 21032805.0 ?×=
(2)梯形公式 ][2 11 kkkk yyhyy ??+= ??
h
yhy k
k +
?= ?
2
)2( 1即 3
12
)()( hyhe k
k
h′′′?= 3
12 h
yk=
1.2
9.1 0
1
yy = 31
1 12|)(| h
yhe =904752.0= 5105397.7 ?×=
1.2
9.1 1
2
yy = 32
2 12|)(| h
yhe =818585.0= 5108215.6 ?×=
1.2
9.1 2
3
yy = 33
3 12|)(| h
yhe =740625.0= 5101719.6 ?×=
1.2
9.1 3
4
yy = 34
4 12|)(| h
yhe =670089.0= 5105841.5 ?×=
1.2
9.1 4
5
yy = 35
5 12|)(| h
yhe =606271.0= 5100523.5 ?×=
(3)改进 Euler公式
][2 11 kkkk yyhyy ??+= ??
x y
0 1.0000
0.1 0.9050
0.2 0.8190
0.3 0.7412
0.4 0.6708
0.5 0.6071
使用 MATLAB软件
Euler2.m
结果为
11 ?? ?= kkk hyyy
9.0 2105.0 ?×
81.0 21045.0 ?×
729.0 210405.0 ?×
6561.0 2103645.0 ?×
5905.0 21032805.0 ?×
904752.0 5105397.7 ?×
818585.0 5108215.6 ?×
740625.0 5101719.6 ?×
670089.0 5105841.5 ?×
606271.0 5100523.5 ?×
0.9050
0.8190
0.7412
0.6708
0.6071
Euler公式
jy |)(| hej
梯形公式
jy |)(| hej
改进 Euler公式
jy
结果比较
Euler法的精度不如梯形公式
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
0.55
0.6
0.65
0.7
0.75
0.8
0.85
0.9
0.95
1
Euler公 式
改 进 Euler公 式
梯 形 公 式
精 确 解
0.33 0.335 0.34 0.345 0.35 0.355 0.36 0.365 0.37 0.375 0.38
0.67
0.68
0.69
0.7
0.71
0.72
0.73
Euler公 式
改 进 Euler公 式
梯 形 公 式精 确 解
(三 ) Simpson求解公式
将 Simpson求积公式
))](,())2(,2(4),([6),( 1111
1
kkkkkk
x
x
xyxfhxyhxfyxfhdxyxfk
k
++++≈ ????∫
?
代入 ( 11)
))](,())2(,2(4),([6)()( 11111 kkkkkkkk xyxfhxyhxfyxfhxyxy +++++≈ ?????
简化后 ,得
)],())2(,2(4),([6 11111 kkkkkkkk yxfhxyhxfyxfhyy +++++= ?????
------(16)
5
)4(
16180
))(,()( hyfSR kk
k ×?=
hh由 Simpson求积公式的误差
可以近似得到 (16)式的截断误差为
5
)4(
16180
))(,()( hyfhe kk
k ×?≈
hh 5)5(
16180
)( hy k
×?=
h
仔细分析 (16)式
)],())2(,2(4),([6 11111 kkkkkkkk yxfhxyhxfyxfhyy +++++= ?????
如何求 ?
求积公式 (16)的精度为 4阶
5
)4(
)2(16180 ))(,()( hyfhe kkk ×?≈ hh 5
)5(
90
)( hy kh?=
)],(),(4),([3 11222 kkkkkkkk yxfyxfyxfhyy +++= ?????
考虑将 (16)式改为下面的形式
------(17)
------(18)
(17)式称为 Simpson求解公式 ,(18)为相应的截断误差项
(17)式是一个隐式求解公式
12 ?? kkk yyy 和时需要前两步的结果并且求
这种形式称为多步法 ,在本课程中将不予介绍