Skip to content

19.4.1 初值问题

下面讨论求解初值问题的基本方法.

(19.93)y=f(x,y),y(x0)=y0

在选定的插值节点集 xi 上求解未知函数 y(x) 的近似值 yi . 通常考虑预先给定步长 h 的等距插值节点

(19.94)xi=x0+ih(i=0,1,2,).

19.4.1.1 欧拉多边形法

初值问题 (19.33) 的积分表达式可由下面的积分给出

(19.95)y(x)=y0+x0xf(x,y(x))dx.

这就是近似的出发点

(19.96)y(x1)=y0+x0x0+hf(x,y(x))dxy0+hf(x0,y0)=y1,

被推广为欧拉折线法或欧拉多边形法

(19.97)yi+1=yi+hf(xi,yi)(i=0,1,2,;y(x0)=y0).

几何插值见图 19.5, 对比 (19.96) 与泰勒展开

(19.98)y(x1)=y(x0+h)=y0+f(x0,y0)h+y(ξ)2h2,

其中 x0<ξ<x0+h ,表明近似值 y1 具有 h2 阶误差. 其精度可以通过减小步长 h 来改进. 实际计算表明步长减半可使近似值 yi 的误差减半.

用欧拉法可以快速看到解曲线的近似形状.

01937d01-b6f6-7881-8294-3a9c82211946_27_315_216_1009_571_0.jpg

19.4.1.2 龙格-库塔法

1. 计算格式

方程 y(x)=f(x,y) 在每一点 (x0,y0) 确定一个方向,解曲线通过点 (x0,y0) 的切线方向. 在下一个插值点前欧拉法沿着该方向. 龙格-库塔法在点 (x0,y0) 与该曲线下一个可能的点 (x0+h,y1) 之间考虑更多的点,适当选取这些附加点以得到 y1 更准确的值. 依赖于 “辅助点” 的数目与排列,有不同阶的龙格-库塔法. 这里给出了四阶方法 (参见第 1263 页 19.4.1.5). (欧拉法是一阶龙格-库塔法.)

对从 x0x1=x0+h 这一步,四阶计算格式在 (19.99) 中得到 (19.93) 的 y1 的近似值. 遵照同样的格式进行下一步.

根据 (19.99) 龙格-库塔法的误差在每一步有 h5 阶,因此适当选取步长可以得到高精度.(19.99)

x

y

k=hf(x,y)

x0

y0

k1

x0+h/2

y0+k1/2

k2

x0+h/2

y0+k2/2

k3

x0+h

y0+k3

k4

x1=x0+h

y1=y0+16(k1+2k2+2k3+k4)

y=14(x2+y2) ,其中 y(0)=0.y(0.5) 由一步确定,即 h=0.5 (见下表). 8 位数字的准确值为 0.01041860 .

x

y

k=18(x2+y2)

0

0

0

0.25

0

0.00781250

0.25

0.00390625

0.00781441

0.5

0.00781441

0.03125763

0.5

0.01041858

2. 注

(1) 对于特殊的微分方程 y=f(x) ,龙格-库塔法化为辛普森公式 (参见第 1254 页 19.3.2.3).

(2) 对于大量的积分步, 有时候必须改变步长. 改变步长可由原步长重复加倍的精度检验来决定. 若由单倍步长计算 y(x0+2h) 得近似值 y2(h) ,而由双倍步长计算得 y2(2h) ,则误差 R2(h)=y(x0+h)y2(h) 的估计为

(19.100)R2(h)115[y2(h)y2(2h)].

关于步长改变的文献见 [19.31].

(3) 龙格-库塔法对高阶常微分方程也适用, 见 [19.31]. 高阶常微分方程可写成一阶常微分方程组. 于是根据 (19.99), 尽管微分方程之间相互关联, 计算可以并行进行.

19.4.1.3 多步法

由于我们仅从 yi 计算 yi+1 ,因此欧拉法 (19.97) 与龙格-库塔法 (19.99) 都称为单步法. 一般的线性多步法有如下形式:


yi+k+αk1yi+k1+αk2yi+k2++α1yi+1+α0yi
(19.101)=h(βkfi+k+βk1fi+k1++β1fi+1+β0fi),

适当选取常数 αiβj(j=0,1,,k;αk=1) . 若 α0+β00 ,公式 (19.101) 称为 k 步法. 若 βk=0 ,因为此时 (19.101) 的右端 fi+j=f(xi+j,yi+j) 仅包含已知的值为 yi,yi+1,,yi+k1 ,故称为显式的. 若 βk0 ,此时 (19.101) 两端都需要求新的值 yi+k ,则称为隐式的.

k 步法中, k 个初值 y0,y1,,yk1 必须已知. 这些初值可以由单步法求得.

若 (19.93) 中的导数 y(xi) 由差分公式代替 (参见第 727 页 9.1.1.5,1.),或 (19.95) 中的积分由求积公式近似 (参见第 1252 页 19.3.1), 则由特殊的多步法来求解初值问题 (19.93).

特殊多步法的例子如下.

1. 中点法则

(19.93) 中的导数 y(xi+1) 由插值节点 xixi+2 之间的割线斜率代替,即

(19.102)yi+2yi=2hfi+1.

2. 米尔恩 (Milne) 法则

(19.95) 中的积分由辛普森公式近似

(19.103)yi+2yi=h3(fi+4fi+1+fi+2).

3. 亚当斯-巴什福思 (Adams-Bashforth) 法则

(19.95) 中的积分由基于 k 个插值节点 xi,xi+1,,xi+k1 的拉格朗日插值多项式 (参见第 1277 页 19.6.1.2) 代替. 在 xi+k1xi+k 之间积分得到

yi+kyi+k1=j=0k1[xi+k1xi+kLj(x)dx]f(xi+j,yi+j)=hj=0k1βjf(xi+j,yi+j).

(19.104)

方法 (19.104) 对于 yi+k 是显式的. 系数 βj 的计算见 [19.4].

19.4.1.4 预估-校正法

实际上, 隐式多步法相较于显式多步法有很大的优越性, 因为在相同的精度下隐式法允许大得多的步长. 但是隐式多步法通常需要求解非线性方程来得到近似值 yi+k . 从 (19.101) 可得如下形式:

(19.105)yi+k=hj=0kβjfi+jj=0k1αjyi+j=F(yi+k).

求解方程 (19.105) 需要迭代. 其具体过程是: 根据显式公式确定初值 yi+k(0) ,称之为预估子, 然后用迭代公式校正

(19.106)yi+k(μ+1)=F(yi+k(μ))(μ=0,1,2,),

这称为由隐式法得到的校正子. 特殊的预估-校正公式有

(1)

(19.107a)yi+1(0)=yi+h12(5fi216fi1+23fi),(19.107b)yi+1(μ+1)=yi+h12(fi1+8fi+5fi+1(μ))(μ=0,1,);

(2)

(19.108a)yi+1(0)=yi2+9yi19yi+6h(fi1+fi),(19.108b)yi+1(μ+1)=yi1+h3(fi1+4fi+fi+1(μ))(μ=0,1,).

辛普森公式作为 (19.108b) 中的校正子在数值上是不稳定的, 它可以被替换为

(19.109)yi+1(μ+1)=0.9yi1+0.1yi+h24(0.1fi2+6.7fi1+30.7fi+8.1fi+1(μ)).

19.4.1.5 收敛性、相容性、稳定性

1. 整体离散误差和收敛性

单步法可以写成一般形式

(19.110)yi+1=yi+hF(xi,yi,h)(i=0,1,2,;y0 给定 ),

这里 F(x,y,h) 称为单步法的增长函数或者顺向函数. 由 (19.110) 得到的近似解依赖于步长 h ,记为 y(x,h) . 它与初值问题 (19.93) 的准确解 y(x) 的差被称为整体离散误差 g(x,h) (见 (19.111)). 若 p 是满足

(19.111)g(x,h)=y(x,h)y(x)=O(hp)

的最大的自然数,称单步法 (19.110) 是 p 阶收敛的. 公式 (19.111) 表明,若 h0 , 步长 h=xx0n ,对于初值问题区域内的每一 x ,近似解 y(x,h) 收敛到准确解 y(x) .

| 欧拉法 (19.97) 有一阶收敛性 p=1 . 对于龙格-库塔法 (19.99) 则有 p=4 .

2. 局部离散误差与相容性

根据 (19.111),收敛阶表明近似解 y(x,h) 逼近准确解 y(x) 的好坏程度. 此外, 一个有趣的问题是增长函数 F(x,y,h) 逼近导数 y=f(x,y) 的程度. 为此目的, 引进所谓局部离散误差 l(x,h) (见 (19.112)). 若 p 是满足

(19.112)l(x,h)=y(x+h)y(x)hF(x,y,h)=O(hp)

的最大的自然数,则称单步法 (19.110) 是 p 阶相容的.

由 (19.112) 直接得到对相容的单步法

(19.113)limh0F(x,y,h)=f(x,y).

欧拉法 (19.97) 有一阶相容性 p=1 . 龙格-库塔法 (19.99) 则有四阶相容性 p=4 .

3. 对初值扰动的稳定性

单步法在实施过程中,舍入误差 O(1/h) 加到整体离散误差 O(hp) 上. 因此我们需要选择一个不太小的有限步长 h>0 . 在初值扰动或者 xi 时数值解 yi 如何表现也是一个重要的问题.

在常微分方程理论下, 如果

(19.114)|y~(x)y(x)||y~0y0|,

则称初值问题 (19.93) 关于初值扰动是稳定的. 这里 y~(x) 为 (19.93) 关于扰动初值 y~0(x0)=y~0 的解. 估计 (19.114) 告诉我们,解的差的绝对值不大于初值的扰动.

一般地, 由于 (19.114) 难以检验, 因此仅考虑线性试验问题

(19.115)y=λy,其中y(x0)=y0(λ0为常数)

用于这一特殊初值问题的单步法是稳定的. 若用一个步长为 h>0 的相容的方法求解上述线性试验问题 (19.115), 得到的近似解满足条件

(19.116)|yi||y0|

则称此法对初值扰动是绝对稳定的.

应用欧拉多边形法求解方程 (19.115) 得到解 yi+1=(1+λh)yi(i=0,1,) . 显然,若 |1+λh|1 ,则 (19.116) 成立,因此步长必须满足 2λh0 .

4. 刚性微分方程组

包括化学动力学问题在内的许多应用问题, 可以归结为这样的微分方程, 其解由递减收敛到零的不同的指数项组成. 这些方程称为刚性微分方程. 例如

(19.117)y(x)=C1eλ1x+C2eλ2x(C1,C2,λ1,λ2 为常数 ),

其中 λ1<0,λ2<0 而且 |λ1|<<|λ2| ,例如 λ1=1,λ2=1000 . 含 λ2 的项对解函数并无显著影响,但在数值方法中影响步长 h 的选取. 在这种情况下,选取适当的数值方法特别重要 (见 [19.29], [19.6]).

version 1.24.0