logo

常微分方程式の解法において、顕式法より陰式法が推奨される状況 📂数値解析

常微分方程式の解法において、顕式法より陰式法が推奨される状況

概要

y˙=f(y) \dot{y} = f(y) 上記のように与えられた常微分方程式を解くための数値的ソルバーは、その計算方式によって明示的手法explicit method暗示的手法implicit methodに分類される。一般に、明示的手法は実装が容易で使い勝手も簡単であるが、暗示的手法はその解法が複雑な代わりに、比較的問題の条件に関わらず安定している。もちろん常にそうとは限らないが、利点欠点を超えて暗示的手法が必要とされる状況がある。

tn+k=tn+khyn=y(yn) \begin{align*} t_{n+k} =& t_{n} + k h \\ y_{n} =& y \left( y_{n} \right) \end{align*} h>0h > 0 に対してタイムステップ tnt_{n} と近似解 yny_{n} を上記のように置く。

例としてオイラー法は次のように前進差分forward differenceを使用して導出できる。 f(y)=y˙=limh0y(t+h)y(t)h    f(yn)1h[y(tn+1)y(tn)]    yn+1=yn+hf(yn) \begin{align*} & f(y) = \dot{y} = \lim_{h \to 0} {\frac{ y (t + h) - y(t) }{ h }} \\ \implies & f \left( y_{n} \right) \approx {\frac{ 1 }{ h }} \left[ y \left( t_{n+1} \right) - y \left( t_{n} \right) \right] \\ \implies & y_{n+1} = y_{n} + h f \left( y_{n} \right) \end{align*} しかし、微分係数の定義からこのような導出は後退差分backward differenceを通しても次のように可能である。 f(y)=y˙=limh0y(t)y(th)h    f(yn)1h[y(tn)y(tn1)]    yn=yn1+hf(yn) \begin{align*} & f(y) = \dot{y} = \lim_{h \to 0} {\frac{ y (t) - y(t - h) }{ h }} \\ \implies & f \left( y_{n} \right) \approx {\frac{ 1 }{ h }} \left[ y \left( t_{n} \right) - y \left( t_{n-1} \right) \right] \\ \implies & y_{n} = y_{n-1} + h f \left( y_{n} \right) \end{align*} こうして得られる更新規則 ynyn1+hf(yn)y_{n} \gets y_{n-1} + h f \left( y_{n} \right)暗示的オイラー法implicit Euler methodといい、数学的導出過程は問題ないが、実際に使用するためには左辺の yny_{n} を求めるために右辺でyny_{n} を既に知っていなければならないという問題がある。明示的オイラー法が簡単に順序的な計算方式を持つのに対し、暗示的オイラー法は毎ステップこの方程式を満たす yny_{n} を見つけるためにニュートン-ラフソン法などの技法を使用し、計算コストが非常に大きくなる。

ここまで見ると、明示的手法に代わって暗示的手法を使用する理由は全くなさそうである。

明示的手法が引き起こす可能性のある問題

しかし、明示的手法は安定性に弱点があり、与えられた微分方程式がスティッフstiffの場合には明示的手法が収束しないことがある。 λ>0\lambda > 0 に対して次のようなダルクイスト問題を考えてみよう。 y˙=λy \dot{y} = - \lambda y この方程式は高校生でも解ける程度の単純な非自明解 y(t)=y0eλty (t) = y_{0} e^{-\lambda t} を持っているが、数値的には明示的手法の弱点を突くことがあり得る。この問題に対する明示的オイラー法は次のように与えられる。 yn+1=ynhλyn=(1hλ)yn y_{n+1} = y_{n} - h \lambda y_{n} = \left( 1 - h \lambda \right) y_{n} 理論的には y0>0y_{0} > 0 であるとき、この方程式の非自明解が y(t)=y0eλt>0y (t) = y_{0} e^{-\lambda t} > 0 であることを知っているが、λ0\lambda \gg 0 の場合、言い換えれば yy の変化が極端に激しい場合には、一般的に敷かれる仮定である「十分に小さい hh」が満足されないことがある。この場合、1hλ<01 - h \lambda < 0 となり、yny_{n} は更新される度に符号が反転して実際の解とは全く異なる結果を示し、(1hλ)<1\left( 1 - h \lambda \right) < -1 ならば、さらには収束すらしなくなる。

暗示的手法の安定性

一方、同じ問題に対する暗示的オイラー法は次のように与えられる。 yn=yn1hλyn    (1+hλ)yn=yn1    yn=11+hλyn1 \begin{align*} y_{n} =& y_{n-1} - h \lambda y_{n} \\ \implies \left( 1 + h \lambda \right) y_{n} =& y_{n-1} \\ \implies y_{n} =& {\frac{ 1 }{ 1 + h \lambda }} y_{n-1} \end{align*} 実際に数値的な計算を行うのとは別に、暗示的手法は最初に与えられたy0y_{0} に常に正の (1+hλ)1\left( 1 + h \lambda \right)^{-1} を掛けるように更新を進めるため、符号が反転することがない。

このような現象は良く考えれば、手法が持つ根本的な特性によって発生することがわかる。

  • 明示的手法はシステムの条件が全て満たされていると仮定し、yny_{n} に何らかの項を加える形で計算するが、実際にはその「何らかの項」が本当に与えられた条件を満たすかどうかを検証せずに加算を強行するために問題が生じることがある。
  • 暗示的手法は初めから一ステップを進めるごとにyny_{n} が与えられた近似式を許容誤差tolerance以内で満たしているかどうかを基準に進むため、一層安定的と言わざるを得ない。