[关闭]
@lyc102 2019-01-26T05:39:16.000000Z 字数 2475 阅读 1606

ODE Solver

math


我们将分次介绍求解微分方程(ODE)的数值方法。采用的教科书是
Numerical Analysis by Gautschi, Walter, Ch 5 and 6: Initial Value Problems for ODEs.

问题:求解一般的非线性ODE


这是典型的初值问题。是一维的自变量,是待求的函数,右端 是已知的二元函数。假设对第二个变量是Lipschitz连续的,即, 则方程的解存在并唯一. 问题是如何数值求解。

除了初值是已知的,从方程我们还可以得知解在初始点的导数,即 . 由Taylor展示,我们可以得到下一步的逼近


右边是一个可计算的量,左边是解在 的值(未知). 为了更好地区分真解和逼近解,我们引入记号 代表数值解。上述的简单算法可以总结为:
Let , for

这就是最简单的显示Euler法。

几何上来讲,真解是一条曲线,欧拉法是用折线段来逼近这条解曲线。直观上来看,只要每条边长度逐渐减小,就能更好地逼近真解。数值分析就是精确地分析数值误差,然后改进方法,提高精度。

比如说,欧拉法可以理解成从当前点出发,沿着切线的方向,朝前移动了一小步。有没有更好的方向选择呢?


上次介绍了最简单的欧拉法:


欧拉法可以理解成从当前点出发,沿着切线的方向,朝前移动了一小步。有没有比切向更好的前进方向呢?

在继续讨论之前,我们先明确一下好坏的标准。先只考虑一个区间 . 步长记为 . 数值解的一般形式是


其中 可以理解为在数值方法在初始 处采用的前进方向。显示欧拉法就是 的情况。

真解由 ODE 和初值 决定了。真解在 的值记为 . 我们考虑初值相同的简单情况,即 .

好和坏可以由数值解和真解的误差 来衡量。稍微仔细想一想就知道这个值正比于步长。所以更公平一点的是 平均化的误差


这个称之为 truncation error(截断误差).

后面的分析可以进一步揭示除上h,实际上是在考虑误差的离散H1范数。Residual 算子在这个范数是适定的.

为了简化记号,我们省略下标 n,下一步的值用下标 next 来替代。这样截断误差可以简写为


我们用下图来总结用到的记号。

根据定义,我们也可以把截断误差写为


这个式子让我们可以从另外一个角度来理解截断误差: 是对 在区间 上积分平均的一个近似。

从这个角度出发,我们立马就得到了显示欧拉法的截断误差是一阶,即


如果我们用中点公式,或者梯形公式来计算积分,那么误差就是二阶的。更一般的,数值积分可以任意高阶地逼近该积分(高斯点)。有什么额外的困难吗?

我们以中点公式为例。同样由 Taylor 展式,我们容易得到


问题在于积分点 是未知的,我们只知道初始值

怎么办?我们可以先用欧拉法走一半,得到 , 把它作为 的逼近,然后用 来替代 . 总结起来就是如下的改进的欧拉法


为编程方便,函数 f 的嵌套可以分开如下


换句话说 是比 更好的前进方向,截断误差从一阶变成了二阶(请自行证明)。

同样的,对积分的梯形公式做类似的修改,我们得到 ODE solver 的梯形公式,也叫 Heun's 方法.


注意到两种方法都需要算两次斜率。这称之为 two stage 法。更一般的形式是


其中 并且 。 几何解释是我们沿着 的方向前进一段距离,然后换个更好的方向,再走完剩下的距离。一般来说 是初始的切线斜率,关键是 的选取,使得截断误差能得到二阶。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注