转载自 李森科在zhihu 链接
第一部分 常微分方程的数值解法
常微分方程数值解法主要分为两大部分,初值问题与边值问题的数值方法。本部分只讨论初值问题。
第一章 常微分方程初值问题
本章讨论一阶常微分方程初值问题 的数值求解,其中
为
和
的已知函数,
为给定的初值。在基本假设下,初值问题
在区间
上有唯一解
,并且
是连续可微的。
数值解法是一种离散化方法,利用这种方法,可以在一系列离散点 上求出未知函数
的近似值
,这个近似值称为初值问题的一个数值解。
自变量 的离散值
是事先取定的,称之为节点,通常取成等距的,即
,其中
称为步长。
1.1 基本概念 Euler法与梯形法
1.1.1 Euler法介绍
本节通过Euler法及梯形法的讨论,说明常微分方程数值解法中的一些基本概念与主要研究的问题。
首先得到初值问题 等价的积分形式
设 ,使用左矩形公式计算一步
,类似地利用
和
计算出
的近似值,那么可以得到Euler法的计算公式
Euler法的几何意义是十分清楚的:在这种方法中,实际上是用一条过 的折现来近似替代过
的积分曲线,因此这种方法又称为折线法。
1.1.2 收敛性,截断误差,稳定性问题的简单介绍
为考察由Euler法提供的数值解是否具有实用价值,首先应该知道,当步长 取得充分小时,所得数值解
能否足够精确地逼近初值问题
的真解
,这就是收敛性问题。
其次,还必须估计数值解与真解之间的误差,以便于在实际计算中根据精度要求确定计算方案。在Euler法中产生的误差称为截断误差。
其次,计算过程中还会由于数值误差的舍入产生舍入误差。由于Euler法是一种步进方法,只有当最初产生的误差在以后各步的计算中不会无限制扩大时,即只有当 的解对初值具有某种连续相依性质时,方法才具有实用价值。这种性质称为稳定性问题。
1.1.3 Euler法的截断误差估计
首先讨论Euler法的截断误差估计及收敛性问题。初值问题 可以写成等价的积分形式
在上式中,令 ,并用左矩形公式计算右端积分,有
称为Euler法的局部截断误差,它表示当
为精确值时,利用公式
计算
的误差。在逐步计算的过程中,局部截断误差会传播和积累,因此还必须对这种误差的积累与传播作出估计。
设 是在无舍入误差情况下用
计算出的数值解,而
是真解,
为Euler法
的整体截断误差。
为估计 ,先给出
的上界。从式
知,
若函数 关于
也满足Lipschitz条件,以
记相应的Lipschitz常数,则由上式推出
其中 ,于是
用式 减去式
,得到整体截断误差所满足的方程
,进一步可以得到
这是一个递推公式,我们需要得到对任意 均成立的上界。下面的引理能够做到这一点。
引理1.1.1 设数列 满足不等式
, 其中
,则有
。
由此我们可以得到整体截断误差的估计
从 及式
,又知
,即Euler法的整体阶段误差与
同阶,此时称Euler法为一阶方法。它的直观意义是,当
是一次多项式时,Euler法是精确的。
1.1.4 Euler法的稳定性
这里考虑仅初值 有误差,而其他计算步骤无误差的简单情况。
…
上述结论所表述的Euler法的性质,及所谓关于初值的稳定性:当初始误差充分小时,以后各步的误差也可充分小。
1.1.5 梯形法
由式 ,取
,并用梯形求积公式计算右端积分,舍去每一步梯形求积公式的余项,可以得到梯形法的计算公式
对于梯形法,可类似地建立其截断误差估计式及收敛性,且 ,此时称梯形法为二阶方法。
这里要注意梯形法与Euler法的一个重要区别,即式 只给出一个关于
的(非线性)方程,而Euler法给出的是
的显式表达式,因此Euler法是一个显式方法,而梯形法是隐式方法。
当梯形法求 时,可利用求解非线性方程的各种方法,最简单的是下述迭代方法:
。
实际计算时,初始近似 可用Euler法求出,然后再使用迭代法,这便是预测校正格式(又称为改进Euler法):
1.1.6 总结
通过上述两个方法的讨论可知,数值方法的研究有如下基本问题:计算公式的构造,方法的收敛性,截断误差估计,稳定性及方法的实际应用等。
1.2 Runge-Kutta方法及一般单步方法
前节介绍的两个方法精度是很低的。本节从提高局部截断误差阶入手,来构造具有较高精度的方法。
1.2.1 Taylor级数法
设初值问题 的解
具有
次连续导数。考虑
在
处的Taylor展开式,可得局部截断误差
。
…
这种方法称为Taylor级数法。虽然它的局部截断误差的阶可任意高,但各阶导数 的计算量非常大,不实用。现在介绍一类既可以达到较高精度,又可避免高阶导数计算的方法——Runge-Kutta方法。
1.2.2 RK方法
根据公式 及积分中值定理
,可得
。
但 是无法计算的。我们用
在位于
上的若干个点(例如
个点)值的线性组合来近似它,并使之有尽可能高的精度。具体来讲,就是用下列公式代替式
现在去选定系数 ,以及
,使RK方法的整体截断误差具有尽可能高的阶
,这个阶数
当然与级数
有关,可记为
。
构造RK方法的基本步骤是,选定上述系数,使 与
两者的Taylor展开式中含
的项的系数对尽可能大的
相等。
书上考虑的是 的情况,在这里我们只考虑
的情况。
-————————————————————————————————-
由一元函数Taylor展开可得
由二元函数的Taylor展开可得
将 代入
可得
比较 与
,使
的系数相等,得
,即
取不同的 ,可以得到不同的2级RK公式。
(以上 情况的推导与书本无关)
-————————————————————————————————-
…
含 项的系数对应相等,且一般不能再使含
项的系数相等,故所得方法的局部截断误差为
,即方法是四阶的。
…
从这些公式的讨论得知,当 时,
级RK方法的阶
;当
,
;当
,
;
。可见,对于四级以上的公式,计算函数值的计算量增加较快,而精度即阶数提高较慢,因此在实际问题中比较常用的是四级RK公式。
1.2.3 单步法的相容性与收敛性
无论是Euler法还是各级RK法,他们都是在已知 的条件下算出
,因此称为显式单步方法,简称为单步方法。这类方法的一般形式为
,其中
称为方法
的增量函数,它是依赖于
及
的非线性函数(此处为简单计,略写了
对
的依赖关系)。
在前面的讨论中,我们一再提到了每个具体方法的阶,现对单步方法 给出阶的一般定义。
定义1.2.1 单步方法 称为是
阶的,如果对于真解
,
是使关系式
成立的最大整数。
…
1.3 线性多步方法
在前面所讨论的单步方法中,为提高截断误差的阶,每个时间布必须增加计算右端 的次数。当
的结构比较复杂时,计算量会比较大。现在指出另一个提高截断误差阶的办法:构造这样的方法,在计算公式中
不仅依赖于
,且也直接依赖于
等已算出的值,但每进一步,只计算一次
的值。这样的方法称为多步方法。记
,若函数值
等以线性组合的形式出现于公式中,则称方法为线性多步方法。
1.3.1 数值积分法
仍然考虑初值问题 。易知
我们用被积函数 的
次Lagrange插值多项式
来近似替代
中的被积函数,其中
,而有下面的恒等式成立
,插值节点是
。
于是得到近似公式
在式 中,用
代替
,仍用
表示
,用等号代替
,则得到线性多步法公式
对 和
的不同选择,得到不同类型的具体公式。对
和
,我们得到Adams显式方法
步Adams显式方法和
步Admas隐式方法的局部截断误差都与
同阶,即他们是
阶方法。
1.3.2 待定系数法
线性 步方法的一般形式为
,这里
和
为实常数(注意这个
先被提了出来),且最大步长系数
,
(其他系数都有可能为0)。为讨论方便,改为以
为未知量,
为已知量。我们用待定系数法来构造这种公式。
…
1.6 数值稳定性
前面各节,对一个数值方法进行理论分析时,引进了相容性,收敛性等有关概念。此时,我们作出过共同的假设,即 。这些概念在数值分析中虽然很重要,但还没有充分考虑到实际计算过程的主要特征:步长
由于计算工具等条件的限制,不可能任意取小,更不要说趋于零。另一方面,由于每计算一步,总会产生舍入误差,而且这些舍入误差还要步步传播下去,步数增多就有可能使误差累积到影响数值解的精度,甚至于淹没了所求的近似解。因此,从实际计算的角度来看,反而要求步长
尽可能大些。对有限的步长
,考察一个方法对舍入误差的敏感性,这就是数值稳定性问题。这不但与计算公式有关,而且与微分方程本身的性质有关。
1.6.1 线性多步方法的绝对稳定性
首先考察一个数值例子。
…
从这个数值表看到,当用有限步长 进行
余步的计算之后,所得数值解与真解之值偏离相当大,已无法作为近似解提供使用。但我们知道,Milne方法
是收敛的二步四阶方法,在所有的二步方法中精度阶最高,应该给出较好的数值计算结果。为什么会出现这种反常的不稳定现象?一个方法具有什么性质才能避免上述不稳定现象?这正是本节要讨论的问题。
首先假设所考虑的线性多步方法是收敛的。对于一般的线性 步方法
…
为了对 的性质进行分析,我们作两个简化问题的假设:…;二是
,即此时所考虑的是模型方程
的求解问题。
…
记 ,用
表示稳定多项式
的零点,其中
。
…
我们感兴趣的不是对 大小的估计,而是判定当
增大时,
是随着增大还是减小或是振荡的问题。若
是在减小,那就是说每步计算所产生的舍入误差对以后计算结果的影响在减弱,即可受到控制。据此,我们引进绝对稳定性的概念。
定义1.6.1 若对于给定的 ,稳定多项式
的所有根
都满足
,则称方法
关于
是绝对稳定的;若对实轴上的某区间(或复平面上某区域)内的任意
,方法都是绝对稳定的,则称此区间(或区域)为绝对稳定区间(或区域)。
Euler法
计算公式为 。对模型方程
,可化为
这是线性 步方法,
,
,
稳定多项式为
绝对稳定区域满足 。当
为复常数时,上式表示复平面上以
为中心的单位圆域内部。当
为实常数时,绝对稳定区间为实轴上的线段
。
向后Euler法
计算公式为 。稳定多项式
。绝对稳定区间满足
,
,即方法的绝对稳定区域为复平面上以
为中心的单位圆域外部。特别地,当
时,方法绝对稳定。若
为实常数,绝对稳定区间为
。
梯形法
计算公式为
稳定多项式为
绝对稳定区间满足 。当
时,总有
,故方法的绝对稳定区间为左半复平面
,而绝对稳定区间为
。
改进Euler法
计算公式为
稳定多项式为
绝对稳定区间满足 ,即
,这是一个复椭圆。绝对稳定区间为
。
二级二阶RK方法
绝对稳定区间为 。
四级四阶RK方法
绝对稳定区间为 。
通过本节的讨论可看到,从绝对稳定性的要求来看,对于 的方程,没有什么可靠的算法,因为误差函数随着计算步数
在增长。若从另一个角度来讨论问题,由于方法的收敛性,此时数值解必然随着真解的增长而增长,但只要误差函数的增长速度低于数值解的增长速度,而不影响数值解的精度,所得的计算结果也具有使用价值,这就是所谓的相对稳定性问题。