線型多段法

線型多段法(linear multistep method)は、常微分方程式の数値解法の一つである。 常微分方程式の数値解法では、初期値から始めて微小な刻み幅の分だけ時間を進め、次の点での解を求める。このステップを繰り返せば解曲線が得られる。 過去の s {\displaystyle s} 個の時刻における値を用いて次の値を算出する方法を、 s {\displaystyle s} 段法または s {\displaystyle s} 次の多段法という。特に s {\displaystyle s} が1の場合は1段法または単段法と呼ばれる。 1段法(single-step method)の例として、オイラー法やルンゲ＝クッタ法が挙げられる。オイラー法では、過去の1時刻での値のみを用いて最新の値を決定する。ルンゲ＝クッタ法では、間にある複数のステップ（例えば中点）の値を用いることで良い近似値を得ているが、2番目のステップの値を得る前に過去の情報を全て捨てている。 多段法では、過去の情報を捨てずに保持して用いることで有効な値を得る。すなわち、多段法では過去の複数の時刻での値を用いる。線型多段法の場合は、それらの線型結合が用いられる。 常微分方程式とその初期値問題を次のように定める。 y ′ = f ( t , y ) , y ( t 0 ) = y 0 . {\displaystyle y'=f(t,y),\quad y(t_{0})=y_{0}.} 離散的な時間 t i {\displaystyle t_{i}} における y ( t ) {\displaystyle y(t)} の値は次のようになる。 t i = t 0 + i h {\displaystyle t_{i}=t_{0}+ih} y i = y ( t i ) = y ( t 0 + i h ) {\displaystyle y_{i}=y(t_{i})=y(t_{0}+ih)} y i ′ = f ( t i , y i ) {\displaystyle y_{i}'=f(t_{i},y_{i})} ここで h {\displaystyle h} は時間の刻み幅であり、 Δ t {\displaystyle \Delta t} とも書かれる。 線型多段法では、求める y {\displaystyle y} の値を計算するために y i {\displaystyle y_{i}} と y i ′ {\displaystyle y_{i}'} の線型結合を用いる。 s {\displaystyle s} 段法では次の値を計算するため、過去の s {\displaystyle s} 個の値 y n , … , y n + s − 1 {\displaystyle y_{n},\ldots ,y_{n+s-1}} を用いる。そのため、求める最新の値は y n + s {\displaystyle y_{n+s}} となる。 線型多段法は次の形で表される。 y n + s + a s − 1 y n + s − 1 + a s − 2 y n + s − 2 + ⋯ + a 0 y n = h ( b s f ( t n + s , y n + s ) + b s − 1 f ( t n + s − 1 , y n + s − 1 ) + ⋯ + b 0 f ( t n , y n ) ) , {\displaystyle {\begin{aligned}&y_{n+s}+a_{s-1}y_{n+s-1}+a_{s-2}y_{n+s-2}+\cdots +a_{0}y_{n}\\&\qquad {}=h{\bigl (}b_{s}f(t_{n+s},y_{n+s})+b_{s-1}f(t_{n+s-1},y_{n+s-1})+\cdots +b_{0}f(t_{n},y_{n}){\bigr )},\end{aligned}}} 2 s + 1 {\displaystyle 2s+1} 個の係数 a 0 , … , a s − 1 {\displaystyle a_{0},\ldots ,a_{s-1}} と b 0 , … , b s {\displaystyle b_{0},\ldots ,b_{s}} がこの方法を定める。各係数は使用者が決めるが、多くの係数がゼロとされることがよくある。 y ( t ) {\displaystyle y(t)} が n {\displaystyle n} 次の多項式であれば、使用者はこれを厳密に補間するように係数を選ぶのが一般的である。 上記のように、 s {\displaystyle s} 段法では過去の s {\displaystyle s} 個の時刻における値が必要となる。初期値として1時刻の値のみが与えられている場合は、1段法を s − 1 {\displaystyle s-1} 回実行するなどして必要な値を用意しておく。 b s = 0 {\displaystyle b_{s}=0} であればこの方法は陽公式と呼ばれる。陽公式は y n + s {\displaystyle y_{n+s}} を直接算出できる。 b s {\displaystyle b_{s}} の値がゼロでなければ、 y n + s {\displaystyle y_{n+s}} の値は f ( t n + s , y n + s ) {\displaystyle f(t_{n+s},y_{n+s})} の値に依存する。この方法は陰公式と呼ばれ、 y n + s {\displaystyle y_{n+s}} を求めるための式があらかじめ解かれていなければならない。陰公式を解くためにはニュートン法のような反復法がよく用いられる。 陽公式は y n + s {\displaystyle y_{n+s}} の値を「予測」するために用いられることがある。陽公式から求めた y n + s {\displaystyle y_{n+s}} の値(予測子)を陰公式の f ( t n + s , y n + s ) {\displaystyle f(t_{n+s},y_{n+s})} に代入すれば、より正確な y n + s {\displaystyle y_{n+s}} に「修正」できる。これが予測子修正子法である。 出発値を一定の誤差以内に選べば m {\displaystyle m} 次の安定な線形多段法は m {\displaystyle m} 次収束することが知られている（ただし m {\displaystyle m} 次のルンゲ＝クッタ法は出発値に関係なく m {\displaystyle m} 次収束する）。 m {\displaystyle m} 次の安定な N {\displaystyle N} 次多段法において、 N {\displaystyle N} が偶数の時 m ≤ N + 2 {\displaystyle m\leq N+2} 、 N {\displaystyle N} が偶数の時 m ≤ N + 1 {\displaystyle m\leq N+1} である。よって N + 2 {\displaystyle N+2} 次より高次の安定な線形 N {\displaystyle N} 段法は存在しない。 これは簡単な線型2段法の一つである。 y n + 2 = y n + 1 + 3 2 h f ( t n + 1 , y n + 1 ) − 1 2 h f ( t n , y n ) . {\displaystyle y_{n+2}=y_{n+1}+{\tfrac {3}{2}}hf(t_{n+1},y_{n+1})-{\tfrac {1}{2}}hf(t_{n},y_{n}).} この方法では2つの値 y n {\displaystyle y_{n}} と y n + 1 {\displaystyle y_{n+1}} を用いて y n + 2 {\displaystyle y_{n+2}} を計算する。しかし初期値問題では y 0 {\displaystyle y_{0}} だけが与えられていて、 y 1 {\displaystyle y_{1}} はこの公式では求められない。そこで計算の開始にあたって y 1 {\displaystyle y_{1}} だけは、別の方法たとえば2次のルンゲクッタ法などで求める必要がある。