0%

ODE数值解

转载自 李森科在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方法

绝对稳定区间为 [公式]

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