logo

暗示的ルンゲ=クッタ法 📂数値解析

暗示的ルンゲ=クッタ法

概要

常微分方程式ソルバーのルンゲ=クッタ法を紹介する。よく使われる4次ルンゲ=クッタ法 RK4は、明示的ルンゲ=クッタ法の一種だ。この文書では、暗示的ルンゲ=クッタ法について説明する。

ビルドアップ1

y=f(t,y),tt0,y(t0)=y0 y^{\prime} = f(t,y),\quad t \ge t_{0},\quad y(t_{0}) = y_{0}

上に与えられた常微分方程式を考えよう。yyttの関数であり、^{\prime}ttに対する微分を意味する。yn=y(tn)y_{n} = y(t_{n})のように示された場合、明示的ルンゲ=クッタ法は、与えられたyny_{n}に対して、yn+1y_{n+1}を次のように近似する方法である。

yn+1=yn+hj=1νbjf(tn+cjh,y(tn+cjh)),n=0,1,2, \begin{equation} y_{n+1} = y_{n} + h\sum_{j=1}^{\nu} b_{j} f(t_{n} + c_{j}h,y(t_{n} + c_{j}h)),\quad n=0,1,2,\cdots \end{equation}

このとき、

ξ1=ynξ2=yn+ha2,1f(tn,ξ1)ξ3=yn+ha3,1f(tn,ξ1)+ha3,2f(tn+c2h,ξ2)ξν=yn+hi=1ν1aν,if(tn+cih,ξi) \begin{align*} \xi_{1} &= y_{n} \\ \xi_{2} &= y_{n} + ha_{2,1}f(t_{n}, \xi_{1}) \\ \xi_{3} &= y_{n} + ha_{3,1}f(t_{n}, \xi_{1}) + ha_{3,2}f(t_{n} + c_{2}h, \xi_{2}) \\ \vdots & \\ \xi_{\nu} &= y_{n} + h\sum_{i=1}^{\nu-1}a_{\nu, i}f(t_{n} + c_{i}h, \xi_{i}) \end{align*}

上の数式に従って、各ξj\xi_{j}は、ξj1\xi_{j-1}を知っていれば計算できるし、明示的メソッドでは、ξ1=yn\xi_{1} = y_{n}になるように設定されているため、ξ1\xi_{1}は既知の値だ。つまり、ξ2\xi_{2}からξν\xi_{\nu}まで順次計算できるように設定されているのが、明示的メソッドである。

暗示的メソッドでは、各ξj\xi_{j}を計算するために、すべてのξi\xi_{i}が必要になるように設定する。つまり、ξj\xi_{j}に関する連立方程式を解かなければ、yn+1y_{n+1}を計算できない。

定義

暗示的ルンゲ=クッタ法は、与えられたyny_{n}に対してyn+1y_{n+1}を次のように近似する方法である。

yn+1=yn+hj=1νbjf(tn+cjh,ξj),n=0,1,2, y_{n+1} = y_{n} + h\sum_{j=1}^{\nu} b_{j} f(t_{n} + c_{j}h, \xi_{j}),\quad n=0,1,2,\dots

このとき、

ξj=yn+hi=1νaj,if(tn+cih,ξi),j=1,,ν \xi_{j} = y_{n} + h\sum_{i=1}^{\nu}a_{j,i}f(t_{n} + c_{i}h, \xi_{i}),\quad j=1,\dots,\nu

このとき、行列A=[aj,i]A = [a_{j,i}]ルンゲ=クッタ行列と呼ぶ。また、下のb\mathbf{b}c\mathbf{c}をそれぞれRKウェイトRKノードと呼ぶ。

b=[b1b2bν]andc=[c1c2cν] \mathbf{b} = \begin{bmatrix} b_{1} \\ b_{2} \\ \vdots \\ b_{\nu} \end{bmatrix} \quad \text{and} \quad \mathbf{c} = \begin{bmatrix} c_{1} \\ c_{2} \\ \vdots \\ c_{\nu} \end{bmatrix}

このとき、

cj=i=1νaj,i,j=1,2,,ν c_{j} = \sum\limits_{i=1}^{\nu} a_{j, i},\quad j=1,2,\dots,\nu

さらに、式(1)(1)が**ν\nuステージ**を持つと言い、このような方法をν\nuステージ(またはν\nu階)ルンゲ=クッタ法と呼ぶ。

説明

明示的メソッドでは行列A=[aj,i]A = [a_{j,i}]下三角行列だったのに対し、暗示的メソッドではAAは任意の行列である。

RKメソッドでは、係数aj,ia_{j,i}bjb_{j}cjc_{j}見つけるのではなく、選んで使うものだ。係数はcAbt\begin{array}{c|c} \mathbf{c} & A \\ \hline & \mathbf{b}^{t} \end{array}のように記され、これをRKテーブルと呼ぶ。

明示的メソッドと比べて、解くのにはるかに多くの時間がかかるのは当然だ。しかし、暗示的メソッドの長所は速さではなく、解の安定性にある。明示的メソッドの短所は解の不安定性であり、それに対する代替として暗示的メソッドが使われる。

参照


  1. Arieh Iserles, A First Course in the Numerical Analysis of Differential Equations (2nd Edition, 2009), p41-42 ↩︎