转载自 李森科在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方法
绝对稳定区间为 。
通过本节的讨论可看到,从绝对稳定性的要求来看,对于 的方程,没有什么可靠的算法,因为误差函数随着计算步数 在增长。若从另一个角度来讨论问题,由于方法的收敛性,此时数值解必然随着真解的增长而增长,但只要误差函数的增长速度低于数值解的增长速度,而不影响数值解的精度,所得的计算结果也具有使用价值,这就是所谓的相对稳定性问题。