Transcript 浏览观看
第十一章 常微分方程初值问题的
数值解法
11.1 欧拉方法
11.2 计算公式的误差分析
11.3 龙格-库塔方法
11.4 向一阶方程组与高阶方程的推广
问题:
y f ( x, y )
求解
x [ x0 , b]
y( x0 ) y0
(11 1)
数值求解方法:
对区间[ x0 , b] 作等距分割, 生成节点xi x0 ih (i 0,1,, n),
b x0
, 然后逐个求解出节点上的函数值 y ( x1 ), y ( x2 ),,
N
y ( xN ) 的近似值
h
11.1 欧拉方法
11.1.1 欧拉公式与改进欧拉公式
y ( xi 1 ) y ( xi )
y( xi ) f ( xi , y ( xi ))
h
得 : y ( xi 1 ) y ( xi ) h f ( xi , y ( xi ))
由
由此可建立计算公式
yi 1 yi h f ( xi , yi )
y0 y ( x0 )
(i 0,1, , N 1)
(11 2)
这称为欧拉公式
例11.1 以 h=0.1为步长,用欧拉法求常微分方程初值问题
y xe x y
y (0) 1
x [0,1]
的数值解 , 并与精确解 y ( x)
1 2
( x 2)e x 比较
2
y ( xi 1 ) y ( xi )
y( xi 1 ) f ( xi 1 , y ( xi 1 ))
h
得 : y ( xi 1 ) y ( xi ) h f ( xi 1 , y ( xi 1 ))
类似地,由
由此可建立另一公式
yi 1 yi h f ( xi 1 , yi 1 )
y0 y ( x0 )
(i 0,1, , N 1)
(11 3)
这称为后退欧拉公式
后退欧拉公式是一个隐式公式,通常采用迭代法求解。
11.1.2
梯形公式与改进欧拉公式
欧拉公式与后退欧拉公式也可采用积分近似的方法推出
对微分方程积分y f ( x, y ) 得
y ( xi 1 ) y ( xi )
xi 1
xi
y( x)dx
xi 1
xi
f ( x, y ( x))dx
从而把微分方程问题转化为积分方程问题
y ( xi 1 ) y ( xi )
xi 1
xi
由
xi 1
xi
f ( x, y ( x))dx
f ( x, y ( x))dx
xi 1
xi
f ( xi , y ( xi ))dx h f ( xi , y ( xi ))
得y ( xi 1 ) y ( xi ) h f ( xi , y ( xi ))
从而可导出欧拉公式
(11 4)
由
xi 1
xi
f ( x, y ( x))dx
xi 1
xi
f ( xi 1 , y ( xi 1 ))dx h f ( xi 1 , y ( xi 1 ))
得y ( xi 1 ) y ( xi ) h f ( xi 1 , y ( xi 1 ))
从而可导出后退欧拉公式
xi 1
h
由 f ( x, y ( x))dx [ f ( xi , y ( xi )) f ( xi 1 , y ( xi 1 ))]
xi
2
h
得 y ( xi 1 ) y ( xi ) [ f ( xi , y ( xi )) f ( xi 1 , y ( xi 1 ))]
2
从而导出梯形公式
h
y
y
[ f ( xi , yi ) f ( xi 1 , yi 1 )]
i 1
i
2
y0 y ( x0 )
梯形公式也是隐式单步法公式
(6 5)
用梯形公式计算时,通常取欧拉公式的解作为迭代初值进行迭
代计算,即采用下式
yi(01) yi h f ( xi , yi )
(k 0,1, )
( k 1)
h
(k )
yi 1 yi [ f ( xi , yi ) f ( xi 1 , yi 1 )]
2
迭代计算到某个k , 使得 | yi(k1) yi(k11) | 时, 取 yi(k1) 作为函数
值 y( xi 1 )的近似值 yi 1
简单地, 直接 取 yi(11) 代替 yi 1则得到显式计算公式
yi 1 yi h f ( xi , yi )
~
(i 0,1,, N 1)
h
~
yi 1 yi 2 [ f ( xi , yi ) f ( xi 1 , yi 1 )]
这称为改进欧拉公式
例11.2 仍取步长h = 0.1,采用改进欧拉法重新计算例 6.1 的
常微分方程初值问题。
解
这时改进欧拉公式为
~
yi 1 yi h ( xi e xi yi )
h
xi
xi 1
~
y
y
[(
x
e
y
)
(
x
e
yi 1 )]
i 1
i
i
i
i 1
2
计算结果见表6-2(书125页)
(i 0,1,,9)
11.2 计算公式的误差分析
定义11.1 若 yi+1 是 yi=y(xi) 从计算得到近似解,则称
y(xi+1) - yi+1为所用公式的局部截断误差,简称为截断误差。
定理11.1 若单步法 yi+1 = yi+h (xi , yi , h) 的局部截断
误差为 O (h p+1) ,且增量函数 (x , y , h) 关于 y 满足李普希
兹条件,即存在常数 L>0,使对 y, ~
y 成立不等式
| ( x, y, h) ( x, ~
y , h) | L | y ~
y|
则其整体截断误差 y(xi)- yi=O(hp)
截断误差的估计(基本假设: yi = y( xi ) )
设 y(x)C 3 [x0 , b] , 则
h2
y( xi 1 ) y( xi h) y( xi ) hy( xi )
y( xi ) O(h3 ) (11 7)
2
(1)对欧拉公式,有
yi 1 y ( xi ) h f ( xi , y ( xi )) y ( xi ) hy( xi )
故
h2
y ( xi 1 ) yi 1
y( xi ) O(h 3 ) O(h 2 )
2
(11 8)
因此,欧拉公式的局部截断误差为 O (h2)
(2)对后退欧拉公式,有
yi 1 y ( xi ) h f ( xi 1 , y ( xi 1 ))
故
h2
y ( xi 1 ) yi 1 y( xi ) O(h3 ) O(h 2 )
2
因此,后退欧拉公式的局部截断误差为 O (h2)
(11 9)
(3)对梯形公式,注意到其公式可改写为
1
yi 1 [ yi hf ( xi , yi )] [ yi h f ( xi 1 , yi 1 )]
2
故由式(6-9)和(6-9)得
y ( xi 1 ) y i 1
1
y ( xi 1 ) [ y i h f ( xi , y i )]
2
y ( xi 1 ) [ y i h f ( xi 1 , y i 1 )]
2
1 h2
h
3
3
[ y ( xi ) O (h )] [
y ( xi ) O(h )]
2 2
2
O(h 3 )
因此,梯形公式的局部截断误差为 O ( h3 )
(6 10)
(4)对改进欧拉公式,有
yi 1 y( xi ) h y( xi )
~
h
~
y
[
f
(
x
,
y
)
f
(
x
,
i 1
i
i
i 1 yi 1 )]
2
而由 y f ( x, y) 得 y f x( x, y) yf y( x, y) ,故有
f ( xi 1 , ~
yi 1 ) f ( xi h , y ( xi ) h y( xi ))
f ( xi , y ( xi )) [h f x h y f y ]( xi , y ( xi )) O(h 2 )
y( xi ) h y( xi ) O(h 2 )
h2
所以 yi 1 y ( xi ) h y( xi )
y( xi ) O(h 3 )
2
与式(6-7)比较得 y(xi+1) -yi+1 = O ( h3 )
因此,改进欧拉公式的局部截断误差为 O ( h3 )
定义11.2 若一种求解常微分方程初值问题的数值计算
方法的局部截断误差为 O ( hp+1 ) ,则称该方法为 p阶精度,
或称该方法为 p阶方法。
由此定义知,欧拉方法与后退欧拉方法为一阶精度,梯
形法与改进欧拉方法为二阶精度。
11.3 龙格-库塔方法
由中值定理,有
y( xi 1 ) y( xi ) ( xi 1 xi ) y( )
h f ( , y( )), ( xi , xi 1 )
因此,以上介绍的各种单步法本质上都是对平均斜
率 f( , y( )) 进行近似,龙格-库塔据之提出了适当选取若
干点上的斜率值作近似以构造高精度计算公式的方法,其
基本思想是基于泰勒展式的待定系数法。
11.3.1
二阶R-K公式
问题:建立二阶精度的计算格式形为
yi 1 yi h(1 K1 2 K 2 )
K1 f ( xi , yi )
K f ( x ah, y bhK )
i
i
1
2
(11 12)
这里1 , 2 , a , b 为待定系数
解
在 y(xi) = yi 的假设下,有
K1 f ( xi , y ( xi )) y( xi )
K 2 f ( xi ah, y ( xi ) bhK1 )
f ( xi , y ( xi )) [ahf x bhK1 f y ]( xi , y ( xi )) O(h 2 )
y( xi ) h [a f x byf y ]( xi , y ( xi )) O(h 2 )
故
yi 1 y( xi ) (1 2 )hy( xi ) h2[a2 f x b2 y f y]( xi , y ( xi )) O(h3 )
yi 1 y( xi ) (1 2 )hy( xi ) h2[a2 f x b2 y f y]( xi , y ( xi )) O(h3 )
2
3
而 y ( xi 1 ) y ( xi ) hy( xi ) (h / 2) y( xi ) O(h )
1
2 1
y ( xi ) hy ( xi ) h [ f x y f y ]( xi , y ( xi )) O(h 3 )
2
2
根据格式为二阶精度,即 y(xi+1) -yi+1 = O(h3) 比较两式系数得
1 2 1
(11 13)
a2 1 / 2
b 1 / 2
2
系数满足(6-13)的形为(6-12)计算格式统称为二阶R-K公式。
当令1=1/2时,解得 2=1/2 ,a=b=1,即为改进欧拉公式。若
令 1=0,解得 2=1,a=b=1/2,则得另一计算公式
yi 1 yi hK2
K1 f ( xi , yi )
K f ( x h / 2, y hK / 2)
i
i
1
2
(11 14)
变形欧拉公式
四阶 R-K 公式
1965年,Butcher研究发现显式R-K公式的精度与需要组
合的斜率值的个数具有如下关系
11.3.2
7 n
8
精度阶
1 2 3 4 4 5 6 n-2
可见,超过四阶精度的R-K公式效率并不高,实际计算通
每一步需计算的 f 值的个数
1
2
3
4
5
6
常选用如下四阶格式
h
yi 1 yi 6 ( K1 2 K 2 2 K 3 K 4 )
K1 f ( xi , yi )
K 2 f ( xi h / 2, yi hK1 / 2)
K f ( x h / 2, y hK / 2)
i
i
2
3
K 4 f ( xi h, yi hK3 )
(11 15)
经典R-K公式
例11.3 取步长h = 0.2,采用经典R-K法计算例 6.1 的常微
分方程初值问题。
解 这时经典R-K公式为
h
y
y
( K1 2 K 2 2 K 3 K 4 )
i
i 1
6
x
K1 xi e i yi
h ( xi h / 2 )
h
( y i K1 )
K 2 ( xi )e
2
2
h ( xi h / 2 )
h
( yi K 2 )
K 3 ( xi 2 )e
2
( xi h )
K
(
x
h
)
e
( yi hK3 )
4
i
取 h=0.2 计算得到表6-4(书133页)。
与例6.1和例6.2比较可见,用经典R-K法计算得到的解比用
欧拉法和改进欧拉法所得到的解精确得多。
11.3.3 步长的自动选择
为便于进行事后误差估计,实际计算时通常采用步长减半
算法。
对于 p 阶精度的计算格式,当取步长为 h 时,记 y [ h ] 为
从 y(xi) 计算得到的 y (xi+1) (xi+1= xi+h) 的近似解,则有
y ( xi 1 ) yi[h1] Ch p 1
y ( xi 1 ) y
~ h
2C
2
[ h / 2]
i 1
(C为常数)
p 1
~
(C为常数)
~
h 较小时, C C 故有
y ( xi 1 ) yi[h1/ 2]
1
p
[h]
y ( xi 1 ) yi 1
2
所以 y ( xi 1 ) y
[ h / 2]
i 1
i 1
1
p
( yi[h1/ 2] yi[h1] )
2 1
记 | yi[h1/ 2] yi[h1] ,则对给定的精度要求
,可根据 按如
|
下方式调整步长:
(1)若 > ,则把步长逐次减半计算,直至 < 为止,
这时最终得到的解即为满足精度要求的近似解。
(2)若 < ,则把步长逐次加倍计算,直至 为止,
这时取前一次步长计算所得到的解作为满足精度要求的近似解。