龙格库塔方法概念
龙格库塔方法是常微分方程初值问题数值解的另一种方法,相比欧拉法精度更高,相比线性多步法对数据的依赖更小,所以实际情况下会较多使用龙格库塔方法。
龙格库塔方法的思想是通过在 \([t_n,t_{n+1}]\) 之间构造 \(s\) 个 stage,取 \(\mathbf{f}\) 在每个 stage 的值 \(\mathbf{y}_i\)(相当于斜率),并用 \(\mathbf{y}_i\) 的线性组合去逼近 Taylor 展开中的高阶项,以达到高阶的目的。
定义1(龙格库塔方法)
针对常微分方程初值问题,一个拥有 \(s\) 个 stage 的龙格库塔方法为:
\[ \begin{cases} \mathbf{y}_i = \mathbf{f}(\mathbf{U}^n + k \sum\limits_{j = 1}^s a_{i,j}\mathbf{y}_j, t_n + c_ik), \quad \forall i = 1,2,\cdots,s\\ \mathbf{U}^{n+1} = \mathbf{U}^n + k \sum\limits_{j = 1}^s b_j\mathbf{y}_j \end{cases}\]且一般会满足 \({\displaystyle c_i = \sum\limits_{j = 1}^s a_{i,j}}\),\({\displaystyle \sum\limits_{i = 1}^s b_i = 1}\)。
为了更清楚地说明龙格库塔方法的思想,下面举一个导出龙格库塔方法系数的例子。
例1. 导出有 2 个 stage 的龙格库塔方法
解:不妨设 \(y_1 = f(u(t_n),t_n), y_2 = f(u(t_n)+aky_1, t_n + ak)\) ,要逼近的 Taylor 展开式为
\[ u(t_{n+1}) = u(t_n) + k u^{\prime}(t_n) + \frac{k^2}{2} u^{\prime\prime}(t_n) \]而根据 \(u^{\prime}(t) = f(u,t)\),因此得到 \(u^{\prime\prime}(t) = f_u(u,t)u^{\prime}(t) + f_t(u,t)\) ,因此 Taylor 展开式可以写为:
\[ u(t_{n+1}) = u(t_n) + kf(u(t_n),t_n) + \frac{k^2}{2} f_u(u(t_n),t_n)f(u(t_n),t_n) + \frac{k^2}{2}f_t(u(t_n),t_n) \]假设龙格库塔以 \(U^{n+1} = U^n + k(b_1 y_1 + b_2y_2)\) 格式进行逼近,则得到:
\[ b_1y_1 + b_2y_2 = f(u(t_n),t_n) + \frac{k}{2} f_u(u(t_n),t_n)f(u(t_n),t_n) + \frac{k}{2}f_t(u(t_n),t_n)\]同理将 \(y_2\) 进行展开得到:
\[ y_2 = f(u(t_n), t_n) + ak f(u(t_n),t_n)f_u(u(t_n),t_n) + ak f_t(u(t_n),t_n) \]对比系数得到:\(b_1 = b_2 = \frac{1}{2}, a = 1\)