Top Banner
p<¡ , 8p<ª Ss November 21, 2013 Ss () p<¡ November 21, 2013 1 / 42
57

November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

Jul 19, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

数值计算方法第七章 常微分方程的数值解法

张晓平

November 21, 2013

张晓平 () 数值计算方法 November 21, 2013 1 / 42

Page 2: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

目录

1 7.0 简介

2 7.1 欧拉方法7.1 欧拉公式7.1.2 欧拉预估-校正方法7.1.3 欧拉方法的误差估计

3 7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想7.2.2 二阶龙格-库塔方法7.2.3 高阶龙格-库塔公式

张晓平 () 数值计算方法 November 21, 2013 2 / 42

Page 3: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 7.0 简介

2 7.1 欧拉方法7.1 欧拉公式7.1.2 欧拉预估-校正方法7.1.3 欧拉方法的误差估计

3 7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想7.2.2 二阶龙格-库塔方法7.2.3 高阶龙格-库塔公式

张晓平 () 数值计算方法 November 21, 2013 3 / 42

Page 4: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 常微分方程的求解问题在实践中经常遇到,但我们只知道一些特殊类型的常微分方程的解析解。

2 在科学与工程问题中遇到的常微分方程往往很复杂,许多情况下不可能求出解的表达式。

3 很多实际问题中,并不需要方程解的表达式,而仅仅需要获得解在若干点上的近似值即可

因此,研究常微分方程的数值解法就很有必要。

张晓平 () 数值计算方法 November 21, 2013 4 / 42

Page 5: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

问题

本章讨论一阶常微分方程初值问题dydx= f (x, y)

y(x0) = y0

x ≥ x0 (1)

的数值解法。

理论上, f (x, y)对于y满足Lipschitz条件:

| f (x, y1) − f (x, y2)| ≤ L|y1 − y2|,

则以上初值问题存在惟一解。

张晓平 () 数值计算方法 November 21, 2013 5 / 42

Page 6: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

问题

本章讨论一阶常微分方程初值问题dydx= f (x, y)

y(x0) = y0

x ≥ x0 (1)

的数值解法。

理论上, f (x, y)对于y满足Lipschitz条件:

| f (x, y1) − f (x, y2)| ≤ L|y1 − y2|,

则以上初值问题存在惟一解。

张晓平 () 数值计算方法 November 21, 2013 5 / 42

Page 7: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

所谓数值解法,就是寻找y(x)在一系列离散节点

a ≤ x0 < x1 < · · · < xn < · · · ≤ b

上的近似值y0, y1, · · · , yn, · · ·,其相邻两个节点的距离hn = xn+1 − xn称为步长,我们总假定节点等距,即hn ≡ h,此时

xn = x0 + nh, n = 0, 1, 2, · · ·

此时节点xn对应的函数值为

y(xn) = y(x0 + nh), n = 0, 1, 2, · · ·

张晓平 () 数值计算方法 November 21, 2013 6 / 42

Page 8: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 7.0 简介

2 7.1 欧拉方法7.1 欧拉公式7.1.2 欧拉预估-校正方法7.1.3 欧拉方法的误差估计

3 7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想7.2.2 二阶龙格-库塔方法7.2.3 高阶龙格-库塔公式

张晓平 () 数值计算方法 November 21, 2013 7 / 42

Page 9: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 7.0 简介

2 7.1 欧拉方法7.1 欧拉公式7.1.2 欧拉预估-校正方法7.1.3 欧拉方法的误差估计

3 7.2 龙格-库塔(Runge-Kutta)方法

张晓平 () 数值计算方法 November 21, 2013 8 / 42

Page 10: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1 欧拉公式

在方程(1)中,用向前差商代替导数,即

y′(xn) ≈y(xn+1) − y(xn)

h

有y(xn+1) ≈ y(xn) + h f (xn, y(xn)),

再用yn近似代替y(xn),便导出显式欧拉公式 yn+1 = yn + h f (xn, yn),

y0 = y(x0)n = 0, 1, 2, · · · , (2)

张晓平 () 数值计算方法 November 21, 2013 9 / 42

Page 11: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1 欧拉公式

在方程(1)中,用向后差商代替导数,即

y′(xn+1) ≈y(xn+1) − y(xn)

h

便可导出隐式欧拉公式 yn+1 = yn + h f (xn+1, yn+1),

y0 = y(x0)n = 0, 1, 2, · · · , (3)

这类隐式格式的计算远比显式格式困难!

张晓平 () 数值计算方法 November 21, 2013 10 / 42

Page 12: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1 欧拉公式

在方程(1)中,用向后差商代替导数,即

y′(xn+1) ≈y(xn+1) − y(xn)

h

便可导出隐式欧拉公式 yn+1 = yn + h f (xn+1, yn+1),

y0 = y(x0)n = 0, 1, 2, · · · , (3)

这类隐式格式的计算远比显式格式困难!

张晓平 () 数值计算方法 November 21, 2013 10 / 42

Page 13: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1 欧拉公式

在方程(1)中,用中心差商代替导数,即

y′(xn) ≈y(xn+1) − y(xn−1)

2h

便可导出两点欧拉公式

yn+1 = yn−1 + 2h f (xn, yn), n = 0, 1, 2, · · · , (4)

在计算yn+1时,需利用前两步的信息yn, yn−1。

张晓平 () 数值计算方法 November 21, 2013 11 / 42

Page 14: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1 欧拉公式

在方程(1)中,用中心差商代替导数,即

y′(xn) ≈y(xn+1) − y(xn−1)

2h

便可导出两点欧拉公式

yn+1 = yn−1 + 2h f (xn, yn), n = 0, 1, 2, · · · , (4)

在计算yn+1时,需利用前两步的信息yn, yn−1。

张晓平 () 数值计算方法 November 21, 2013 11 / 42

Page 15: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 7.0 简介

2 7.1 欧拉方法7.1 欧拉公式7.1.2 欧拉预估-校正方法7.1.3 欧拉方法的误差估计

3 7.2 龙格-库塔(Runge-Kutta)方法

张晓平 () 数值计算方法 November 21, 2013 12 / 42

Page 16: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1.2 欧拉预估-校正方法

对方程y′ = f (x, y)的两端从xn到xn+1积分,得

y(xn+1) = y(xn) +∫ xn+1

xn

f (x, y(x)) dx.

利用梯形公式计算积分得

y(xn+1) ≈ y(xn) +h2

[ f (xn, y(xn)) + f (xn+1, y(xn+1))]

再用yn代替y(xn)的近似值,便可导出梯形公式

yn+1 = yn +h2

[ f (xn, yn) + f (xn+1, yn+1)], n = 0, 1, · · · .

梯形公式可视为显示欧拉公式与隐式欧拉公式的算术平均,它仍为隐式,不便于直接计算。

张晓平 () 数值计算方法 November 21, 2013 13 / 42

Page 17: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1.2 欧拉预估-校正方法

对方程y′ = f (x, y)的两端从xn到xn+1积分,得

y(xn+1) = y(xn) +∫ xn+1

xn

f (x, y(x)) dx.

利用梯形公式计算积分得

y(xn+1) ≈ y(xn) +h2

[ f (xn, y(xn)) + f (xn+1, y(xn+1))]

再用yn代替y(xn)的近似值,便可导出梯形公式

yn+1 = yn +h2

[ f (xn, yn) + f (xn+1, yn+1)], n = 0, 1, · · · .

梯形公式可视为显示欧拉公式与隐式欧拉公式的算术平均,它仍为隐式,不便于直接计算。

张晓平 () 数值计算方法 November 21, 2013 13 / 42

Page 18: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1.2 欧拉预估-校正方法

实际计算中,可将欧拉公式与梯形公式相结合,先由显示欧拉求得一个初步的近似值,记为yn+1,称之为预报值;再将该值代入梯形公式算得yn+1,这一步称为校正。流程如下

预估 yn+1 = yn + h f (xn, yn),

校正 yn+1 = yn +h2

[ f (xn, yn) + f (xn+1, yn+1)n = 0, 1, 2, · · · (5)

该公式称为欧拉预估-校正公式或改进的欧拉公式,它是一种显示公式,是对隐式梯形公式的改进,可以直接计算。

张晓平 () 数值计算方法 November 21, 2013 14 / 42

Page 19: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1.2 欧拉预估-校正方法

为便于上机编程,可将上述步骤改为yp = yn + h f (xn, yn),

yc = yn + h f (xn+1, yp),

yn+1 =12

(yp + yc)

张晓平 () 数值计算方法 November 21, 2013 15 / 42

Page 20: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1.2 欧拉预估-校正方法

利用欧拉公式和预估-校正公式求初值问题 y′ = y − 2xy

y(0) = 1

在[0, 1]上的数值解(取h = 0.1),并与精确解y =√

2x + 1进行比较。

欧拉公式 yn+1 = yn + h(yn −

2xn

yn

)y0 = 1, h = 0.1

n = 0, 1, 2, · · · , 9

张晓平 () 数值计算方法 November 21, 2013 16 / 42

Page 21: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1.2 欧拉预估-校正方法

预估-校正公式yn+1 = yn + h

(yn −

2xn

yn

)yn+1 = yn +

h2

(yn −

2xn

yn+ yn+1 −

2xn+1

yn+1

)y0 = 1, h = 0.1

n = 0, 1, 2, · · · , 9

张晓平 () 数值计算方法 November 21, 2013 17 / 42

Page 22: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1.2 欧拉预估-校正方法

Table: 计算结果

xn 欧拉公式yn 预估-校正公式yn 精确解y(xn) =√

2xn + 10.0 1 1 10.1 1.1 1.095909 1.0954450.2 1.191818 1.184097 1.1832160.3 1.277438 1.266201 1.2649110.4 1.358213 1.343360 1.3416410.5 1.435133 1.416402 1.4142140.6 1.508966 1.485956 1.4832400.7 1.580338 1.552514 1.5491930.8 1.649783 1.616475 1.6124520.9 1.717779 1.678166 1.6733201.0 1.784771 1.737867 1.732051

张晓平 () 数值计算方法 November 21, 2013 18 / 42

Page 23: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.1 欧拉方法7.1.2 欧拉预估-校正方法

x

y

欧拉公式

预估-校正公式精确解

图: 计算结果

张晓平 () 数值计算方法 November 21, 2013 19 / 42

Page 24: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 7.0 简介

2 7.1 欧拉方法7.1 欧拉公式7.1.2 欧拉预估-校正方法7.1.3 欧拉方法的误差估计

3 7.2 龙格-库塔(Runge-Kutta)方法

张晓平 () 数值计算方法 November 21, 2013 20 / 42

Page 25: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定义

设yn为精确解,即yn = y(xn),在此前提下,用某种数值方法计算yn+1的误差Rn = y(xn+1) − yn+1称为该数值方法计算yn+1的局部截断误差。

定义

若某一数值方法的局部截断误差为Rn = O(hp+1),p为正整数,则称这种数值方法为p阶方法,或者说该方法有p阶精度。

张晓平 () 数值计算方法 November 21, 2013 21 / 42

Page 26: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定义

设yn为精确解,即yn = y(xn),在此前提下,用某种数值方法计算yn+1的误差Rn = y(xn+1) − yn+1称为该数值方法计算yn+1的局部截断误差。

定义

若某一数值方法的局部截断误差为Rn = O(hp+1),p为正整数,则称这种数值方法为p阶方法,或者说该方法有p阶精度。

张晓平 () 数值计算方法 November 21, 2013 21 / 42

Page 27: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定理

显式欧拉方法的局部截断误差为O(h2),它为一阶方法。

证明.由泰勒公式

y(xn+1) = y(xn + h) = y(xn) + hy′(xn) +h2

2!y′′(xn) +

h3

3!y′′′(xn) + · · ·

对于显式欧拉公式,

yn+1 = yn + h f (xn, yn) = y(xn) + h f (xn, yn) = y(xn) + hy′(xn)

则其局部截断误差为

y(xn+1) − yn+1 =h2

2!y′′(xn) + · · · = O(h2)

张晓平 () 数值计算方法 November 21, 2013 22 / 42

Page 28: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定理

显式欧拉方法的局部截断误差为O(h2),它为一阶方法。

证明.由泰勒公式

y(xn+1) = y(xn + h) = y(xn) + hy′(xn) +h2

2!y′′(xn) +

h3

3!y′′′(xn) + · · ·

对于显式欧拉公式,

yn+1 = yn + h f (xn, yn) = y(xn) + h f (xn, yn) = y(xn) + hy′(xn)

则其局部截断误差为

y(xn+1) − yn+1 =h2

2!y′′(xn) + · · · = O(h2)

张晓平 () 数值计算方法 November 21, 2013 22 / 42

Page 29: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定理

显式欧拉方法的局部截断误差为O(h2),它为一阶方法。

证明.由泰勒公式

y(xn+1) = y(xn + h) = y(xn) + hy′(xn) +h2

2!y′′(xn) +

h3

3!y′′′(xn) + · · ·

对于显式欧拉公式,

yn+1 = yn + h f (xn, yn) = y(xn) + h f (xn, yn) = y(xn) + hy′(xn)

则其局部截断误差为

y(xn+1) − yn+1 =h2

2!y′′(xn) + · · · = O(h2)

张晓平 () 数值计算方法 November 21, 2013 22 / 42

Page 30: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定理

显式欧拉方法的局部截断误差为O(h2),它为一阶方法。

证明.由泰勒公式

y(xn+1) = y(xn + h) = y(xn) + hy′(xn) +h2

2!y′′(xn) +

h3

3!y′′′(xn) + · · ·

对于显式欧拉公式,

yn+1 = yn + h f (xn, yn) = y(xn) + h f (xn, yn) = y(xn) + hy′(xn)

则其局部截断误差为

y(xn+1) − yn+1 =h2

2!y′′(xn) + · · · = O(h2)

张晓平 () 数值计算方法 November 21, 2013 22 / 42

Page 31: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定理

梯形公式为二阶方法。

证明.由梯形求积公式的误差知

|RT ( f )| ≤h3

12max |y′′(x)|

其局部截断误差为O(h3) �

张晓平 () 数值计算方法 November 21, 2013 23 / 42

Page 32: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定理

梯形公式为二阶方法。

证明.由梯形求积公式的误差知

|RT ( f )| ≤h3

12max |y′′(x)|

其局部截断误差为O(h3) �

张晓平 () 数值计算方法 November 21, 2013 23 / 42

Page 33: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定理

预估-校正公式为二阶方法。

证明.预估-校正公式可改写为

yn+1 = yn +12 (k1 + k2),

k1 = h f (xn, yn),

k2 = h f (xn + h, yn + k1).

在yn = y(xn)的前提下,

k1 = h f (xn, yn) = hy′(xn),

k2 = h f (xn + h, y(xn) + k1)

= h[f (xn, y(xn)) + h fx(xn, y(xn)) + k1 fy(xn, y(xn)) + O(h2)

]= h f (xn, y(xn)) + h2

[fx(xn, y(xn)) + f (xn, y(xn)) fy(xn, y(xn)) + O(h)

]= hy′(xn) + h2y′′(xn) + O(h3)

张晓平 () 数值计算方法 November 21, 2013 24 / 42

Page 34: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定理

预估-校正公式为二阶方法。

证明.预估-校正公式可改写为

yn+1 = yn +12 (k1 + k2),

k1 = h f (xn, yn),

k2 = h f (xn + h, yn + k1).

在yn = y(xn)的前提下,

k1 = h f (xn, yn) = hy′(xn),

k2 = h f (xn + h, y(xn) + k1)

= h[f (xn, y(xn)) + h fx(xn, y(xn)) + k1 fy(xn, y(xn)) + O(h2)

]= h f (xn, y(xn)) + h2

[fx(xn, y(xn)) + f (xn, y(xn)) fy(xn, y(xn)) + O(h)

]= hy′(xn) + h2y′′(xn) + O(h3)

张晓平 () 数值计算方法 November 21, 2013 24 / 42

Page 35: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

定理

预估-校正公式为二阶方法。

证明.预估-校正公式可改写为

yn+1 = yn +12 (k1 + k2),

k1 = h f (xn, yn),

k2 = h f (xn + h, yn + k1).

在yn = y(xn)的前提下,

k1 = h f (xn, yn) = hy′(xn),

k2 = h f (xn + h, y(xn) + k1)

= h[f (xn, y(xn)) + h fx(xn, y(xn)) + k1 fy(xn, y(xn)) + O(h2)

]= h f (xn, y(xn)) + h2

[fx(xn, y(xn)) + f (xn, y(xn)) fy(xn, y(xn)) + O(h)

]= hy′(xn) + h2y′′(xn) + O(h3)

张晓平 () 数值计算方法 November 21, 2013 24 / 42

Page 36: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

证明.将k1, k2代入原方程得,

yn+1 = yn + hy′(xn) +12

h2y′′(xn) + O(h3)

与泰勒公式比较,其截断误差为

y(xn+1) − yn+1 =h3

3!y′′′(xn) + · · ·

张晓平 () 数值计算方法 November 21, 2013 25 / 42

Page 37: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 7.0 简介

2 7.1 欧拉方法7.1 欧拉公式7.1.2 欧拉预估-校正方法7.1.3 欧拉方法的误差估计

3 7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想7.2.2 二阶龙格-库塔方法7.2.3 高阶龙格-库塔公式

张晓平 () 数值计算方法 November 21, 2013 26 / 42

Page 38: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 7.0 简介

2 7.1 欧拉方法

3 7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想7.2.2 二阶龙格-库塔方法7.2.3 高阶龙格-库塔公式

张晓平 () 数值计算方法 November 21, 2013 27 / 42

Page 39: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想

考察差商y(xn+1) − y(xn)

h,由微分中值定理,存在ξ,使得

y(xn+1) − y(xn)h

= y′(ξ), ξ ∈ (xn, xn+1).

由方程y′ = f (x, y(x))

得y(xn+1) = y(xn) + h f (ξ, y(ξ)),

称k? = f (ξ, y(ξ))为[xn, xn+1]的平均斜率。

张晓平 () 数值计算方法 November 21, 2013 28 / 42

Page 40: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想

只要对平均斜率提供一种近似算法,便相应导出一种计算格式。

1 显式欧拉公式

以k1 = (xn, yn)作为k?的近似

2 欧拉预估-校正公式

以xn与xn+1两个点的斜率值k1和k2取算术平均作为k?的近似

张晓平 () 数值计算方法 November 21, 2013 29 / 42

Page 41: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想

只要对平均斜率提供一种近似算法,便相应导出一种计算格式。

1 显式欧拉公式

以k1 = (xn, yn)作为k?的近似

2 欧拉预估-校正公式

以xn与xn+1两个点的斜率值k1和k2取算术平均作为k?的近似

张晓平 () 数值计算方法 November 21, 2013 29 / 42

Page 42: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想

只要对平均斜率提供一种近似算法,便相应导出一种计算格式。

1 显式欧拉公式

以k1 = (xn, yn)作为k?的近似

2 欧拉预估-校正公式

以xn与xn+1两个点的斜率值k1和k2取算术平均作为k?的近似

张晓平 () 数值计算方法 November 21, 2013 29 / 42

Page 43: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想

龙格-库塔方法的基本思想

设法在[xn, xn+1]内多预报几个点的斜率值,然后将它们加权平均作为k?的近似,则有可能构造出更高精度的计算格式。

张晓平 () 数值计算方法 November 21, 2013 30 / 42

Page 44: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 7.0 简介

2 7.1 欧拉方法

3 7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想7.2.2 二阶龙格-库塔方法7.2.3 高阶龙格-库塔公式

张晓平 () 数值计算方法 November 21, 2013 31 / 42

Page 45: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.2 二阶龙格-库塔方法

推广欧拉预估-校正方法,考察[xn, xn+1]内任一点

xn+p = xn + ph, 0 < p ≤ 1

用xn与xn+p两个点的斜率值k1和k2加权平均得到平均斜率k?。即令

yn+1 = yn + h[(1 − λ)k1 + λk2], λ待定

张晓平 () 数值计算方法 November 21, 2013 32 / 42

Page 46: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.2 二阶龙格-库塔方法

类似于欧拉预估-校正,取

k1 = f (xn, yn), yn+p = yn + phk1, k2 = f (xn+p, yn+p)

便得如下格式 yn+1 = yn + h[(1 − λ)k1 + λk2],

k1 = f (xn, yn),

k2 = f (xn + ph, yn + phk1)

(6)

希望适当选取λ, p,使上述格式具有更高精度。

张晓平 () 数值计算方法 November 21, 2013 33 / 42

Page 47: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.2 二阶龙格-库塔方法

类似于欧拉预估-校正,取

k1 = f (xn, yn), yn+p = yn + phk1, k2 = f (xn+p, yn+p)

便得如下格式 yn+1 = yn + h[(1 − λ)k1 + λk2],

k1 = f (xn, yn),

k2 = f (xn + ph, yn + phk1)

(6)

希望适当选取λ, p,使上述格式具有更高精度。

张晓平 () 数值计算方法 November 21, 2013 33 / 42

Page 48: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.2 二阶龙格-库塔方法

设yn = y(xn),分别将k1和k2泰勒展开,

k1 = f (xn, yn) = hy′(xn),

k2 = f (xn + h, y(xn) + phk1)

= f (xn, y(xn)) + ph fx(xn, y(xn)) + phk1 fy(xn, y(xn)) + O(h2)

= f (xn, y(xn)) + ph[fx(xn, y(xn)) + f (xn, y(xn)) fy(xn, y(xn)) + O(h)

]= y′(xn) + phy′′(xn) + O(h2)

代入计算格式(6)得

yn+1 = y(xn) + hy′(xn) + λph2y′′(xn) + O(h3)

与泰勒公式

y(xn+1) = y(xn) + hy′(xn) +h2

2!y′′(xn) + O(h3)

要使计算格式具有二阶精度,须使λp = 12。

张晓平 () 数值计算方法 November 21, 2013 34 / 42

Page 49: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.2 二阶龙格-库塔方法

把满足λp = 12的公式(6)统称为二阶龙格-库塔公式。

1 当p = 1, λ =12时,(6)就是欧拉预估-校正公式

2 当p =12, λ = 1时,(6)形式为

yn+1 = yn + hk2,

k1 = f (xn, yn),

k2 = f (xn+ 12, yn +

h2 k1).

该公式可看作是用中点斜率值k2作为平均斜率k?的近似,它也可称为中点公式,具有二阶精度。

张晓平 () 数值计算方法 November 21, 2013 35 / 42

Page 50: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.2 二阶龙格-库塔方法

把满足λp = 12的公式(6)统称为二阶龙格-库塔公式。

1 当p = 1, λ =12时,(6)就是欧拉预估-校正公式

2 当p =12, λ = 1时,(6)形式为

yn+1 = yn + hk2,

k1 = f (xn, yn),

k2 = f (xn+ 12, yn +

h2 k1).

该公式可看作是用中点斜率值k2作为平均斜率k?的近似,它也可称为中点公式,具有二阶精度。

张晓平 () 数值计算方法 November 21, 2013 35 / 42

Page 51: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

1 7.0 简介

2 7.1 欧拉方法

3 7.2 龙格-库塔(Runge-Kutta)方法7.2.1 龙格-库塔方法的基本思想7.2.2 二阶龙格-库塔方法7.2.3 高阶龙格-库塔公式

张晓平 () 数值计算方法 November 21, 2013 36 / 42

Page 52: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.3 高阶龙格-库塔公式

常用的三阶龙格-库塔公式为

yn+1 = yn +h6

(k1 + 4k2 + k3),

k1 = f (xn, yn),

k2 = f(xn +

h2, yn +

h2

k1

),

k3 = f (xn + h, yn + h(−k1 + 2k2))

(7)

张晓平 () 数值计算方法 November 21, 2013 37 / 42

Page 53: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.3 高阶龙格-库塔公式

经典的四阶龙格-库塔公式为

yn+1 = yn +h6

(k1 + 2k2 + 2k3 + k4),

k1 = f (xn, yn),

k2 = f(xn +

h2, yn +

h2

k1

),

k3 = f(xn +

h2, yn +

h2

k2

),

k4 = f (xn + h, yn + hk3)

(8)

张晓平 () 数值计算方法 November 21, 2013 38 / 42

Page 54: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.3 高阶龙格-库塔公式

用经典四阶龙格-库塔公式求解初值问题 y′ = y −2xy,

y(0) = 1

在[0, 1]上的数值解(取h = 0.2)。

张晓平 () 数值计算方法 November 21, 2013 39 / 42

Page 55: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.3 高阶龙格-库塔公式

k1 = yn −2xn

yn,

k2 = yn + 0.1k1 −2(xn + 0.1)yn + 0.1k1

,

k3 = yn + 0.1k2 −2(xn + 0.1)yn + 0.1k2

,

k4 = yn + 0.2k3 −2(xn + 0.2)yn + 0.2k3

,

yn+1 = yn +0.13

(k1 + 2k2 + 2k3 + k4),

张晓平 () 数值计算方法 November 21, 2013 40 / 42

Page 56: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.3 高阶龙格-库塔公式

Table: 计算结果

xn 0 0.2 0.4 0.6 0.8 1.0yn 1 1.18323 1.34167 1.48324 1.61251 1.73214

y(xn) 1 1.18322 1.34164 1.48324 1.61245 1.73205

张晓平 () 数值计算方法 November 21, 2013 41 / 42

Page 57: November 21, 2013xpzhang.me/teach/CM18_Fall/slide07.pdf1 7.0 •¸ 2 7.1 ’É„Õ 7.1 ’Él 7.1.2 ’É—0!c„Õ 7.1.3 ’É„Õ—ïî0¡ 3 7.2 Ž< fiT(Runge-Kutta)„Õ 7.2.1

7.2 龙格-库塔(Runge-Kutta)方法7.2.3 高阶龙格-库塔公式

x

y

图: 计算结果

张晓平 () 数值计算方法 November 21, 2013 42 / 42