玩命加载中 . . .

龙格库塔算法


从微分方程初值问题说起

考虑微分方程初值问题:

要求解$y(x)$,即原函数。

在计算机领域,我们将会面临很多离散形式数据,而上述微分方程初值问题是在连续区间$[a,b]$上考虑的,于是接下来,我们仅考虑离散形式的初值问题。通俗地说,在上述初值问题前提下,对$a\leqslant x_0 \leqslant x_1 \leqslant x_2 \leqslant \dots \leqslant x_N = b$,步长$\Delta x$取常量$h$,求解每个点对应的函数值$y(x_i)$的近似值$y_i$是为目标(其中,$i=1,2\dots,N$)。

(前向)欧拉方法

先介绍一种比较简单的方法——欧拉方法。它的本质是使用差分来求出近似解。考虑$x_i$处,用前向差分近似微分:

于是

接下来,用$y(x_i)$的近似值$y_i$代替之得到

这便是差分方程初值问题,可以通过$y_0$逐步计算得到$y_1,y_2,\dots,y_N$。

后向欧拉方法

将上面的差分方程描述为

其中,$\bar{K}$称为区间$[x_i,x_{i+1}]$上的平均斜率;上面的欧拉方法,实际上就是用区间左端点处的斜率$f(x_i,y_i)$作为了区间平均斜率,显然精度上有所欠缺。此外,也可以用区间右端点处的斜率$f(x_{i+1},y_{i+1})$作为区间的平均斜率,即

但是相比于前向欧拉方法,后向欧拉方法的计算复杂得多,因为$y_{i+1}$是隐式的。通常通过迭代公式进行计算:

改进欧拉方法

在介绍改进欧拉方法之前,先回到原始的微分方程初值问题。我们将其的解表示为积分形式为

于是问题的关键,就转化为了求解上述等式的右部,通常可以用矩形公式或者梯形公式计算。这里用梯形公式,得

同样,用$y_i$代替$y(x_i)$,得

虽然用梯形公式计算得到的精度较高,但是其计算量较大。于是我们得到一种综合了矩形公式和梯形公式的改进欧拉方法:先用前向欧拉方法计算出一个初步近似值$\bar{y}_{i+1}$,然后利用梯形公式对其进行修正得到近似值$y_{i+1}$。

也就是说,改进欧拉方法中,平均斜率$\bar{K}$取$f(x_i,y_i),f(x_{i+1},\bar{y}_{i+1})$的平均值。

龙格库塔算法

那么,我们能否通过精度更大的$\bar{K}$来计算出更精确的$y_{i+1}$呢?答案是肯定的。通常在区间$[x_i,x_{i+1}]$上取若干点,将它们的斜率的加权平均作为整个区间的平均斜率$\bar{K}$。接下来,为了推导稍显简单,仍然取两个点,取加权平均作为平均斜率

其中,

确定系数

至此,由于上式中的参数$\lambda_1,\lambda_2,\alpha,\beta$均为未知,于是接下来,尝试确定参数使得精度尽可能高。不过,在正式求解之前,先计算一下二阶微分,便于后续分析。

由于已知

故二阶微分

分析局部截断误差$y(x_{i+1})-y_{i+1}$,注意到$y(x_i)=y_i$,对$k_1$,有

对$k_2$,在$(x_i,y_i)$处进行泰勒展开,有

于是,

要使得$y_{i+1} - y(x_{i+1}) = \mathcal{O}(h^3)$,对比上面的两个式子,有如下结果

对于上述有四个未知数、三个方程的不定方程,其解不唯一。选取最简单的解即可。

四阶龙格库塔算法

为了提高计算精度,在区间$[x_i,x_{i+1}]$上选取更多的点:尝试选取四个点,会得到四阶龙格库塔算法:

待定参数$\lambda_m,\alpha_m,\beta_m$的推导过程与上述二阶龙格库塔算法推导过程类似,计算更复杂。取一组较简单的解,得


文章作者: 鹿卿
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 鹿卿 !
评论
  目录