您可以自由地共享和演绎本文稿, 只需遵守开源协议[CC By 4.0]
如果这篇文章帮助到你, 可以请我喝一杯咖啡~
本来不太想看第九章的(
本章讨论一阶常微分方程的数值解.
一阶常微分方程的数值解
对于一个附带了初值条件(否则将无法定义$y$的截距)的一阶常微分方程:
\[\left\{ \begin{aligned} &\frac{dy}{dx}=f(x,y) \\ &y(a)=a_0 \end{aligned} \right. \tag{8.1}\]求函数$y$在若干点$x_0,x_1,…,x_n$的函数值$y_0,y_1,…,y_n$
我们假定方程右侧的多项式$f(x,y)$是连续的,且关于$y$满足比连续更为高级的条件Lipschitz连续条件(收缩映射):
\[\vert f(x,a)-f(x,b)\vert\leqslant L\vert a-b\vert\]这样,$y$存在单解(具体的证明可以参看常微分方程和实分析)
一阶近似法
既然我们只需要在离散的点集上进行求算,故上述方程便允许一定程度上的信息损失,而这种近似操作的首选目标便是微分或积分算子:
导数的差商近似
我们使用”向前的”差商来近似方程8.1中的导数项,有
\[\frac{y_{i+1}-y_i}{x_{i+1}-x_i}=f(x_i,y_i)\tag{8.2}\]故由式子(8.2)初值$y_0=a_0$可迭代求出所有的$y_i$
本质上是一种基于Taylor公式的线性近似,称为Euler方法
积分的数值积分近似
上述方程还可以写作:
\[dy=f(x,y)dx\]两侧积分:
\[y_{i+1}=\int_{x_i}^{x_{i+1}}f(x,y)dx + y_i\]再以矩形公式近似上述积分值:
\[y_{i+1}=({x_{i+1}}-{x_i})f(x_i,y_i) + y_i\]故由式子(8.2)初值$y_0=a_0$可迭代求出所有的$y_i$
高阶近似法
Euler方法校正:梯形近似
上述对于微积分的近似始终只基于单点函数值来预测,这导致了精度的下降,因此我们尝试使用两点的函数值来预测,即使用梯形公式给出一迭代公式(为方便讨论,不妨设待求节点是距离为$h$的等距点):
\[y_{n+1}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1})]\tag{8.3}\]直观地,式8.3无法直接拿来使用,因为等式的右侧也出现了$y_{n+1}$,而在待求$y_{n+1}$的时候我们明显无法先验地知晓$y_{n+1}$的值.
故我们先行一次普通Euler法,将其解集记为$\vec{y}$,再将它于式子8.3中执行$1$次即得改进的解.