MathLabs

応用数学と計算数学

微分方程式の数値解法

厳密な公式が使えないときに解を近似する、オイラー法やルンゲ・クッタ法のような逐次的手法。

直観小さなステップを繰り返して曲線を近似する

物理学、工学、金融に現れる微分方程式の多くは、初等関数による閉じた形の解を持たない。数値解法は、厳密な曲線y(t)y(t)を、各点で方程式が与える傾きf(t,y)f(t,y)だけを使って逐次的に計算される近似値の列y0,y1,y2,…y_0, y_1, y_2, \ldotsで置き換える。刻み幅hhが小さいほど折れ線はより真の曲線に近づくが、その分だけ計算量も増えるため、どの方法も精度と計算コストのバランスを取る。

刻み幅が小さくなるにつれて割線が接線に収束する様子を示すインタラクティブなグラフで、オイラー法の背後にある線形近似を示している。
t0t_0における割線から接線への収束:オイラー法の1ステップは、まさにこの接線方向にhhだけ進んでから傾きを計算し直す。

中高オイラー法

定義: オイラー法(陽解法)

初期値問題y′=f(t,y)y' = f(t, y)(y(t0)=y0y(t_0) = y_0)が与えられたとき,刻み幅hhを選びtn=t0+nht_n = t_0 + nhとおく。オイラー法は更新式yn+1=yn+hf(tn,yn)y_{n+1} = y_n + h f(t_n, y_n)によって近似値を進め,n=0,1,2,…n=0,1,2,\ldotsについて繰り返す。

y′=f(t,y),y(t0)=y0y' = f(t, y), \qquad y(t_0) = y_0

ここでf(t,y)f(t,y)は与えられた傾き関数、hhは固定された刻み幅、yny_nはnnステップ後の真の値y(tn)y(t_n)に対する近似値である。各ステップは、現在の点でf(t,y)f(t,y)が予測する接線方向にhhだけ水平に進み、新しい点で傾きを計算し直すだけであり、幾何学的には曲線を近似する折れ線となる。

yn+1=yn+hf(tn,yn)y_{n+1} = y_n + h f(t_n, y_n)
y′=f(t,y)y'=f(t,y)に対する逐次解法の比較
手法1ステップあたりのffの評価回数大域誤差の次数硬い方程式に適するか
陽的オイラー法1O(h)O(h)いいえ(hhを非常に小さくする必要がある)
古典的RK4法4O(h4)O(h^4)いいえ(硬い問題にはやはり小さなhhが必要)
陰的オイラー法1回(方程式を1つ解く必要あり)O(h)O(h)はい(任意のh>0h>0でA-安定)

大学収束性:各手法はどれほど正確か

f(t,y)f(t,y)がyyに関してリプシッツ定数LLを持ち,厳密解が[t0,T][t_0, T]上で∣y′′(t)∣≤M|y''(t) | \le Mを満たすとする。このとき,刻み幅hhのnnステップ後の大域誤差en=y(tn)−yne_n = y(t_n) - y_nは∣en∣≤hM2L(eL(tn−t0)−1)|e_n| \le \frac{hM}{2L}\left(e^{L(t_n-t_0)}-1\right)を満たす。

なぜ正しいのか?

各オイラーステップは、テイラー級数を1次の項で打ち切ることによりO(h2)O(h^2)程度の小さな局所誤差を生じるが、固定された時刻TTに到達するために必要なおよそ(T−t0)/h(T-t_0)/hステップの間にこれらの局所誤差が積み重なる可能性がある。この定理は、その積み重なりが穏やかであることを示す。リプシッツ条件により小さな局所誤差が指数関数より速く増幅されることはなく、大域誤差は刻み幅に関して1次のO(h)O(h)に落ち着く。これは局所誤差より1次低く、1段階法に共通するパターンである。

証明

1ステップで生じる局所誤差を、テイラー展開で進めた厳密解とオイラー更新式との差として書く。テイラーの定理より、tnt_nとtn+1t_{n+1}の間のあるξn\xi_nに対してy(tn+1)=y(tn)+hf(tn,y(tn))+h22y′′(ξn)y(t_{n+1}) = y(t_n) + h f(t_n, y(t_n)) + \frac{h^2}{2} y''(\xi_n)が成り立ち,局所打ち切り誤差はτn=h22y′′(ξn)\tau_n = \frac{h^2}{2} y''(\xi_n)であり,仮定∣y′′(t)∣≤M|y''(t) | \le Mによってh2M2\frac{h^2 M}{2}で抑えられる。

この厳密なテイラー展開からオイラー更新式yn+1=yn+hf(tn,yn)y_{n+1} = y_n + h f(t_n, y_n)を引く。en=y(tn)−yne_n = y(t_n) - y_nとおくと,両辺の差はen+1=en+h[f(tn,y(tn))−f(tn,yn)]+τne_{n+1} = e_n + h\left[f(t_n, y(t_n)) - f(t_n, y_n)\right] + \tau_nとなる。リプシッツ条件により角括弧内の項はL∣en∣L|e_n|で抑えられるので,∣en+1∣≤(1+hL)∣en∣+h2M2|e_{n+1}| \le (1+hL)|e_n| + \frac{h^2 M}{2}となる。

e0=0e_0 = 0(初期値は厳密である)なので,この漸化式を帰納法で展開すると,等比級数の公式を用いて∣en∣≤h2M2∑k=0n−1(1+hL)k=hM2L[(1+hL)n−1]|e_n| \le \frac{h^2M}{2}\sum_{k=0}^{n-1}(1+hL)^k = \frac{hM}{2L}\left[(1+hL)^n - 1\right]が得られる。最後に,任意の実数xxについて1+x≤ex1+x\le e^xであるから(1+hL)n≤eLhn=eL(tn−t0)(1+hL)^n \le e^{Lhn} = e^{L(t_n-t_0)}となり,これにより上界は∣en∣≤hM2L(eL(tn−t0)−1)|e_n| \le \frac{hM}{2L}\left(e^{L(t_n-t_0)}-1\right)となる——これはまさに主張された不等式であり,tnt_nを固定すれば明らかにO(h)O(h)である。

古典的な4次のルンゲ・クッタ法は、段k1=f(tn,yn)k_1 = f(t_n, y_n)、k2=f(tn+h2,yn+h2k1)k_2 = f\left(t_n+\frac{h}{2}, y_n+\frac{h}{2}k_1\right)、k3=f(tn+h2,yn+h2k2)k_3 = f\left(t_n+\frac{h}{2}, y_n+\frac{h}{2}k_2\right)、k4=f(tn+h,yn+hk3)k_4 = f(t_n+h, y_n+hk_3)と更新式yn+1=yn+h6(k1+2k2+2k3+k4)y_{n+1} = y_n + \frac{h}{6}(k_1+2k_2+2k_3+k_4)で定義され、1ステップあたりの局所打ち切り誤差はO(h5)O(h^5)であり、前と同じリプシッツ条件のもとでnnステップ後の大域誤差はO(h4)O(h^4)である。

なぜ正しいのか?

RK4は、1回ではなく巧妙に選ばれた中間点で1ステップあたり4回傾きを評価し、重み1,2,2,11,2,2,1を66分の1として平均する。この追加の手間により、オイラー法に比べて精度が3次高くなる。すなわち、1次の項で止めるのではなく、真の解のテイラー展開にh4h^4の項まで一致させることができる。

証明

各段を(tn,yn)(t_n, y_n)のまわりでテイラー級数展開する。k1=f(tn,yn)=y′(tn)k_1=f(t_n,y_n)=y'(t_n)であり,k2,k3k_2, k_3は前の段の方向に半ステップずらしたyny_nを用いてffを中点で評価するので,y′=fy'=f、y′′=ft+fyfy''=f_t+f_yf、y′′′=ftt+2ftyf+fyyf2+fy(ft+fyf)y'''=f_{tt}+2f_{ty}f+f_{yy}f^2+f_y(f_t+f_yf)の連鎖律を各kik_iに代入すると,各段が捉えられる次数までy′(tn),y′′(tn),y′′′(tn)y'(t_n), y''(t_n), y'''(t_n)に一致するhhの4つの多項式が得られる。

重み付き結合16(k1+2k2+2k3+k4)\frac{1}{6}(k_1+2k_2+2k_3+k_4)を作りhhを掛けると,この和におけるh1,h2,h3h^1, h^2, h^3とh4h^4の係数は,テイラー展開y(tn+h)=y(tn)+hy′(tn)+h22y′′(tn)+h36y′′′(tn)+h424y(4)(tn)+⋯y(t_n+h) = y(t_n) + hy'(t_n) + \frac{h^2}{2}y''(t_n) + \frac{h^3}{6}y'''(t_n) + \frac{h^4}{24}y^{(4)}(t_n) + \cdotsのh4h^4の項までの係数とちょうど一致する——これはまさに,RK4表の係数c=(0,12,12,1)c=(0,\frac12,\frac12,1)とb=(16,13,13,16)b=(\frac16,\frac13,\frac13,\frac16)が満たすように選ばれた古典的な次数条件そのものである。

2つの級数がh4h^4まで一致するので,両者が異なりうる最初の項はO(h5)O(h^5)の項であり,したがって局所打ち切り誤差は1ステップあたりO(h5)O(h^5)である。オイラーの場合と同様に,固定時刻に到達するために必要なn≈(T−t0)/hn\approx (T-t_0)/hステップにわたってこれらの局所誤差をffのリプシッツ条件を用いて積み重ねると,hhのべきがちょうど1つ失われ,大域誤差はO(h4)O(h^4)となる。

発展硬い(スティッフ)方程式と陰的手法

微分方程式が硬い(スティッフ)と呼ばれるのは、非常に異なる時間スケールが混在する場合である。解のある成分は極めて速く減衰する一方、他の成分はゆっくり変化するため、精度だけを考えれば大きく取れるはずの刻み幅を、数値的安定性を保つためだけに陽的手法では非常に小さくせざるを得ない。単純なテスト方程式y′=λyy'=\lambda y(λ<0\lambda<0)では、オイラー法は∣1+hλ∣≤1|1+h\lambda|\le 1が成り立つとき、すなわちh≤2∣λ∣h \le \frac{2}{|\lambda|}のときにのみ安定であるため、強く負のλ\lambda(速く減衰するモード)はhhを極めて小さくすることを強いる。

yn+1=yn+hf(tn+1,yn+1)y_{n+1} = y_n + h f(t_{n+1}, y_{n+1})

後退(陰的)オイラー法yn+1=yn+hf(tn+1,yn+1)y_{n+1} = y_n + h f(t_{n+1}, y_{n+1})のような陰的手法は、各ステップでyn+1y_{n+1}についての方程式を解く必要がある(通常、ffが非線形なら二ュートン法を用いる)が、その代わりこのテスト方程式に対してはどんな刻み幅でも安定であり続ける——これはA-安定性と呼ばれる性質で、化学反応速度論、回路シミュレーション、制御理論に現れる硬い系にまさに必要とされるものである。

大学実世界での応用と具体例

微分方程式の数値積分法は、シミュレーションソフトウェアの計算上の背骨である。支配方程式と初期条件だけを使って、物理系や金融系の状態を時間方向に進める。回路シミュレータはこれを使って電圧や電流を予測し、天体力学ソフトウェアは衛星軌道を伝播させ、化学工学者は硬い方程式向けの解法を使って速い反応ネットワークをモデル化し、クオンツ金融では金利モデルやオプション価格モデルのシミュレーションに用いる。

例: オイラー法によるRC回路の放電

RC回路のコンデンサはdVdt=−V\frac{dV}{dt} = -V(時間はRCRC単位で測る)に従って放電し、初期電圧はV(0)=5V(0)=5である。刻み幅h=0.1h=0.1のオイラー法を用いてV(0.2)V(0.2)を推定せよ。

解答

ここでf(t,V)=−Vf(t,V) = -Vであるから、更新式は単にh=0.1h=0.1のもとでVn+1=Vn−hVn=(1−h)VnV_{n+1} = V_n - hV_n = (1-h)V_nとなる。

第1ステップ:V1=V0−hV0=5−0.1(5)=4.5V_1 = V_0 - h V_0 = 5 - 0.1(5) = 4.5。

第2ステップ:V2=V1−hV1=4.5−0.1(4.5)=4.05V_2 = V_1 - hV_1 = 4.5 - 0.1(4.5) = 4.05となり、オイラー法による推定値はV(0.2)≈4.05V(0.2)\approx 4.05である。

厳密解はV(t)=5e−tV(t) = 5e^{-t}であり、5e−0.2≈4.09375e^{-0.2}\approx 4.0937が得られるので、2ステップ後のオイラー推定値はおよそ0.0440.044だけずれている——これはhhに比例して縮小する1次の大域誤差O(h)O(h)と整合している。

例: 速い反応がなぜ極小の刻み幅を強いるのか

簡略化した化学反応速度論モデルには、y′=−50(y−cos⁡t)y' = -50(y-\cos t)(y(0)=0y(0)=0)で支配される速く減衰する過渡状態がある。陽的オイラー法が数値的に安定であり続ける最大の刻み幅を求め、代わりに陰的オイラー法を使うと何が変わるかを説明せよ。

解答

速い過渡状態の近くでは、方程式は線形テスト方程式y′≈−50yy'\approx -50yのように振る舞うため、関係する値はλ=−50\lambda=-50である。陽的オイラー法は∣1+hλ∣≤1|1+h\lambda|\le 1のときにちょうど安定であり、λ=−50\lambda=-50ではこれが∣1−50h∣≤1|1-50h|\le 1となり、つまり0≤h≤0.040\le h\le 0.04となる——その区間では解の遅い部分がほとんど変化しないにもかかわらず、これは非常に小さな上限である。

hhを0.040.04より大きく選ぶと、真の解は滑らかで有界であるにもかかわらず、数値解は振幅が増大しながら振動し始める。これは精度の失敗ではなく安定性の失敗である。なぜなら、局所打ち切り誤差自体ははるかに大きなhhでも十分許容範囲だからである。

陰的オイラー法yn+1=yn+hf(tn+1,yn+1)y_{n+1} = y_n + h f(t_{n+1}, y_{n+1})に切り替えると、同じテスト方程式に対する安定性条件は∣11−hλ∣≤1\left|\frac{1}{1-h\lambda}\right|\le 1となり、λ<0\lambda<0のとき任意のh>0h>0で成り立つ。すなわちこの手法はA-安定であり、刻み幅は速い過渡状態ではなく、解の遅い部分をどれだけ正確に追跡する必要があるかだけに基づいて選べる。

y′=yy'=y、y(0)=1y(0)=1とし、刻み幅h=0.5h=0.5でオイラー法を用いると、1ステップ後の近似値y1y_1はいくらか。

古典的な4次のルンゲ・クッタ法(RK4)の大域的な精度の次数はいくつか。

陽的オイラー法を硬い微分方程式に適用したとき、刻み幅が安定限界よりわずかに大きいだけだと、通常何が起こるか。

以下のうち、微分方程式の数値解法の典型的な実世界での利用例はどれか。

参考文献

  1. J. C. Butcher (2016). Numerical Methods for Ordinary Differential Equations
  2. E. Hairer, S. P. Norsett, G. Wanner (1993). Solving Ordinary Differential Equations I: Nonstiff Problems