ルンゲ・クッタ法 シミュレーター 戻る
数値解析シミュレーター

ルンゲ・クッタ法 シミュレーター — RK4 vs Euler の精度比較

減衰率 k・ステップ幅 h・計算終端 x_end・初期値 y₀ から、古典的 4 次ルンゲ・クッタ法(RK4)と Euler 法で常微分方程式 dy/dx = −k·y を数値積分し、厳密解 y = y₀·exp(−k·x) と並べて比較します。終端値・Euler 相対誤差を実時間表示し、累積誤差を log10 スケールで可視化することで「収束次数」を直感的に学べます。

パラメータ設定
減衰率 k
1/x
ステップ幅 h
計算終端 x_end
初期値 y₀

既定値は k=0.5, h=0.1, x_end=4, y₀=10。厳密解 y(4) = 10·e⁻² ≈ 1.3534。h を大きくすると Euler の誤差が爆発的に増大します。

計算結果
RK4 終端値 y(x_end)
Euler 終端値 y(x_end)
厳密解 y(x_end)
Euler 相対誤差
解の比較(厳密解 / RK4 / Euler)

横軸=x [0, x_end]/縦軸=y/黒太線=厳密解 y = y₀·exp(−k·x)/青実線=RK4/赤実線=Euler。h が小さいと RK4 と厳密解がほぼ重なり、Euler は下方にずれます。h を大きくすると Euler のずれが顕著になります。

累積誤差 |y_num − y_exact|(log10 スケール)

横軸=x/縦軸=log10|y_num − y_exact|/青=RK4 の絶対誤差/赤=Euler の絶対誤差。RK4 は Euler より数桁小さい(h=0.1 で約 10⁵ 倍精度差)。x が増えると両者とも誤差が増大するが、増加率が大きく違います。

理論・主要公式

対象とする常微分方程式と厳密解:

$$\frac{dy}{dx} = -k\,y,\qquad y(0)=y_0 \;\Longrightarrow\; y(x) = y_0\,e^{-kx}$$

陽的 Euler 法(1 次・大域誤差 O(h)):

$$y_{n+1} = y_n + h\,f(x_n, y_n) = y_n(1-kh)$$

古典的 4 次ルンゲ・クッタ法(4 次・大域誤差 O(h⁴)):

$$\begin{aligned}k_1 &= h\,f(x_n, y_n)\\ k_2 &= h\,f(x_n+\tfrac{h}{2}, y_n+\tfrac{k_1}{2})\\ k_3 &= h\,f(x_n+\tfrac{h}{2}, y_n+\tfrac{k_2}{2})\\ k_4 &= h\,f(x_n+h, y_n+k_3)\\ y_{n+1} &= y_n + \tfrac{1}{6}(k_1+2k_2+2k_3+k_4)\end{aligned}$$

$k$ は減衰率(時定数 $\tau=1/k$)、$h$ はステップ幅、$y_0$ は初期値。Euler は始点傾きのみで近似、RK4 は 4 点を Simpson 風に重み付き平均する。h を半分にすると Euler 誤差は 1/2、RK4 誤差は 1/16 に縮む。

ルンゲ・クッタ法 シミュレーターとは

🙋
大学の授業で「ルンゲ・クッタ法は Euler 法より精度が高い」って聞いたんですけど、どれくらい違うんですか?数字で実感したくて。
🎓
いい質問だ。本ツールの既定値(k=0.5, h=0.1, x_end=4, y₀=10)で動かしてごらん。dy/dx = −0.5y を解いて x=4 での y を比較すると、厳密解が 10·e⁻² = 1.3534、Euler が 1.2851、RK4 が 1.3534 と表示される。Euler は約 −5.05 % ずれているのに、RK4 は厳密解と小数 4 桁まで完全一致だ。下のログスケール誤差グラフでは、RK4 の誤差が 10⁻⁵ オーダー、Euler が 10⁻¹ オーダーと、なんと 10⁴ 倍の差がついている。
🙋
えっ、10000 倍も違うんですか!なんでそんなに差が出るんですか?同じ ODE を解いてるのに。
🎓
違いは「区間内で傾きを何回評価するか」だ。Euler は区間の始点 x_n の傾きだけで近似するから、1 ステップ進めると Taylor 展開の 2 次以上が誤差になる(局所誤差 O(h²)、大域誤差 O(h))。RK4 は始点・中点 2 回・終点の 4 点で傾きを評価し、Simpson 則風に重み (1, 2, 2, 1)/6 で平均する。これで 4 次の Taylor まで一致するから局所誤差は O(h⁵)、大域誤差は O(h⁴) になる。h=0.1 だと Euler は 0.1 オーダー、RK4 は 0.1⁴=10⁻⁴ オーダーだ。
🙋
play ボタンで h をスイープしてみたら、h が 0.5 を超えたあたりで Euler のグラフが波打ち始めて、最後は発散しました!RK4 は平気そうですけど。
🎓
これが「数値安定性」だ。Euler 法の安定条件は |1 − kh| ≤ 1、つまり h ≤ 2/k。k=0.5 だと h=4 が境界だが、その手前から振動が出始める。一方 RK4 の安定領域はもっと広く、h ≈ 2.78/k まで安定だ。剛性問題(k が大きい・スケール差が大きい)では、Euler は刻み幅を極端に小さくしないと爆発するから、実用では使われない。CAE では Abaqus/Standard の Hilber-Hughes-Taylor 法(α 法)や LS-DYNA の中央差分など、各分野に最適化された解法が使い分けられているよ。
🙋
じゃあ RK4 が最強なんですか?常に RK4 を使えばいいのでは?
🎓
そう単純じゃない。RK4 は 1 ステップで 4 回も f を評価する、つまり Euler の 4 倍の計算コストだ。だから「同じ計算量」で比較すると、Euler に h/4 を使うのと RK4 に h を使うのとの精度を比べる必要がある。それでも RK4 が圧勝するんだけどね(精度差 10³ オーダー)。さらに実務では Dormand-Prince の RK45 が標準で、これは局所誤差を推定して自動で刻み幅を調整する「適応積分」だ。MATLAB の ode45、SciPy の RK45、Mathematica の NDSolve はみんなこれ。教科書 RK4 は固定刻み幅で「最初に学ぶ古典」という位置づけだ。

よくある質問

Euler 法は区間 [x_n, x_n+h] での傾きを区間始点 x_n の値だけで近似するため、局所誤差が O(h²)、大域誤差が O(h) しかありません。一方 RK4 は区間始点・中点(2 回)・終点の合計 4 点で傾きを評価し、Simpson 公式に類似した重み (1, 2, 2, 1)/6 で平均することで、局所誤差 O(h⁵)、大域誤差 O(h⁴) を達成します。本ツールの既定値(k=0.5, h=0.1, x_end=4, y₀=10)では Euler が y(4)=1.2851(厳密 1.3534 に対し −5.05 %)、RK4 は 1.3534(誤差 1e-9 以下)と桁違いの精度差が出ます。同じ精度を Euler で出すには h を 1/10000 倍する必要があり、計算コストは RK4 の数千倍になります。
ステップ幅 h を大きくすると 1 ステップあたりの計算量が減るので速くなりますが、局所誤差が h の冪乗で増加します。Euler 法は誤差が h に比例(1 次)、RK4 は h⁴ に比例(4 次)するため、h を 2 倍にすると Euler の誤差は 2 倍、RK4 は 16 倍になります。さらに dy/dx = −k·y のような剛性問題では、|1 − kh| > 1 になると Euler 解が発散します(k=0.5 の場合 h > 4 で振動・発散)。本ツールの play ボタンで h を 0.005 から 1.0 までスイープすると、h=0.5 付近で Euler が振動し始め、h>2 で完全に破綻する様子が観察できます。RK4 は h ≈ 2.78 まで安定なので、剛性問題でも実用的です。
代表的な ODE 解法には (1) 陽的 Euler 法(1 次・最も単純)、(2) 中点法(2 次)、(3) Heun 法 / 改良 Euler 法(2 次)、(4) RK4(4 次・本ツールで実装)、(5) Adams-Bashforth 多段法(過去の値を再利用して計算量を削減)、(6) 後退 Euler 法・台形則・BDF(陰解法、剛性問題に強い)、(7) Dormand-Prince RK45(適応刻み幅、MATLAB の ode45 や SciPy の RK45 で標準採用)があります。CAE 実務では、構造動力学の陽解法 LS-DYNA に中央差分法(2 次)、Abaqus/Standard の陰解法に Hilber-Hughes-Taylor 法(α 法)が使われています。本ツールの RK4 は教科書定番ですが、実用ではエラー制御付きの RK45(Cash-Karp / Dormand-Prince)が標準的です。
本ツールは 1 次元線形 ODE dy/dx = −k·y のみを対象とし、(1) 連立 ODE 系(dx/dt, dy/dt, dz/dt の Lorenz 系等)、(2) 非線形 ODE(Van der Pol, Lotka-Volterra)、(3) 偏微分方程式(PDE)の時間積分(熱伝導・波動)、(4) 適応刻み幅制御(RK45)、(5) 剛性検出と陰解法への自動切替、(6) シンプレクティック積分(ハミルトン系のエネルギー保存)— を実装しません。実際の CAE ソルバーではこれらが組み合わされ、例えば構造動力学の Newmark-β 法、CFD の Crank-Nicolson スキーム、軌道計算の Verlet 積分などが使い分けられています。本ツールは収束次数の概念を直感的に学ぶ教育用途に最適です。

実世界での応用

構造動力学(FEM 過渡応答解析):地震応答や衝撃解析では運動方程式 M·ü + C·u̇ + K·u = F(t) を時間積分します。Abaqus/Standard では Hilber-Hughes-Taylor 法(HHT-α、陰解法 2 次精度)、LS-DYNA では中央差分法(陽解法 2 次精度)が標準です。陽解法は剛性行列の逆行列計算が不要で衝突解析に有利、陰解法は大きな刻み幅で長時間応答に向く — というトレードオフはまさに本ツールの Euler vs RK4 と同じ「精度・安定性・計算コスト」の三つ巴です。Newmark-β 法(β=1/4, γ=1/2)は無条件安定で、商用 CAE で最もよく使われる積分スキームです。

CFD(流体解析の時間積分):OpenFOAM の icoFoam(非定常層流)では Euler 陰解法または Crank-Nicolson 法、SU2 では RK4 が標準オプションです。Navier-Stokes 方程式は本質的に非線形・剛性を持つため、CFL 条件(Courant-Friedrichs-Lewy)で刻み幅が制限されます。本ツールで h を大きくすると Euler が発散する様子は、CFL > 1 で CFD ソルバーが発散するのと完全に同じ物理現象です。LES(Large Eddy Simulation)では RK3-TVD(3 次 Runge-Kutta with Total Variation Diminishing)を使い、ショック付近で振動を抑えます。

軌道力学(衛星・惑星運動):NASA の SPICE Toolkit や GMAT は、衛星軌道計算に RK7(8) や Bulirsch-Stoer 法を使います。地球周回衛星では 1 周回あたり 0.1 秒程度の精度が要求され、長期積分(10 年スパン)では Verlet 法やシンプレクティック積分でエネルギー保存を担保します。本ツールの厳密解 y = y₀·e⁻ᵏˣ は単純減衰ですが、ケプラー軌道(2 体問題)にも厳密解があり、RK4 と比較すると同様に「短期は RK4 が高精度、長期はシンプレクティック法が有利」というトレードオフが見えます。

制御工学(リアルタイム制御の積分):PID 制御の積分項、状態空間モデル ẋ = Ax + Bu のシミュレーション、Kalman フィルタの予測ステップ — どれも ODE 積分の応用です。リアルタイム制御では計算時間制約があり、刻み幅を 1 ms 程度に固定して Euler 法を使うことが多い(FPGA 実装でも軽量)。一方、自動運転シミュレータ CARLA や Matlab Simulink のオフライン解析では ode45 (RK45) が標準。本ツールで k と h のスライダーを動かし、「制御帯域の 10 倍の刻み幅」(k·h ≪ 0.1)が安全な目安であることを実感してみてください。

よくある誤解と注意点

最も多い誤解は、「RK4 を使えば常に高精度」という思い込みです。RK4 の大域誤差は O(h⁴) ですが、これは「定数 C × h⁴」の形で、C は解の高次微分に依存します。振動が激しい解(高周波成分が強い)や不連続な右辺(ヘビサイド関数を含む)では C が大きくなり、見かけ上の精度が落ちます。例えば衝撃を含む構造解析では、RK4 ではなく波動を保存する LeapFrog 法や TVD-RK 法が選ばれます。本ツールのような滑らかな指数減衰では RK4 が最適ですが、応用問題では解の性質に合わせた解法選択が必須です。

次に多いのが、「刻み幅 h は小さければ小さいほどよい」という勘違いです。h を小さくすると離散化誤差は減りますが、計算ステップ数が増えるため浮動小数点丸め誤差が累積します。倍精度浮動小数点(IEEE 754 double)の機械イプシロンは約 2.2e-16 で、h を 1e-8 以下にすると丸め誤差が離散化誤差を上回り、かえって精度が悪化します(最適 h は √(2ε) ≈ 1e-8 程度)。本ツールの h スライダー最小値 0.005 はこの最適範囲内ですが、より小さな h を試したい場合はソースコードを直接編集してみてください。

最後に、「RK4 は剛性問題でも使える」という誤解。剛性問題(時定数が桁違いに異なる ODE 系)では、RK4 の安定領域 |λh| ≤ 2.78 が制約になります。例えば化学反応で τ₁=1 s, τ₂=1e-6 s の 2 成分系では、τ₂ に合わせて h ≪ 1 μs にする必要があり、解の興味スケール(秒オーダー)に対して非現実的な計算量になります。剛性問題には必ず陰解法(後退 Euler、BDF、Rosenbrock)を使うこと。MATLAB の ode15s、SciPy の BDF / Radau がこれに相当します。CAE ソルバーが「Implicit/Explicit」の選択を要求する物理的理由はここです。