オイラー法・RK4比較 戻る
数値解析

オイラー法・RK4 比較シミュレーター

常微分方程式を3種の数値積分法で解き、厳密解との誤差をリアルタイム比較。刻み幅 h を動かして O(h)・O(h²)・O(h⁴) の精度の違いを体感しよう。

パラメータ設定
ODE 選択
初期値 y₀
x₀(開始)
xₙ(終了)
刻み幅 h

一時停止中はスライダーを動かすと結果が即座に更新されます。

オイラー法の数値積分(厳密解との比較)
ライブ計測値
刻み幅 h
現在の x
オイラー推定 y
誤差(厳密解との差)
理論・主要公式

前進オイラー法

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

RK4 公式

$$k_1 = f(x_n,\,y_n)$$ $$k_2 = f\!\left(x_n+\tfrac{h}{2},\,y_n+\tfrac{h}{2}k_1\right)$$ $$k_3 = f\!\left(x_n+\tfrac{h}{2},\,y_n+\tfrac{h}{2}k_2\right)$$ $$k_4 = f(x_n+h,\,y_n+h\,k_3)$$ $$y_{n+1}= y_n + \frac{h}{6}(k_1+2k_2+2k_3+k_4)$$

数値積分法の比較とは

🙋
「オイラー法」と「RK4」って何が違うんですか?名前は聞いたことあるけど…。
🎓
大まかに言うと、微分方程式をコンピュータで解くときの「計算の丁寧さ」が違うんだ。オイラー法は現在の傾きだけで先を予測するシンプルな方法。RK4は4回も傾きを計算して、より正確に予測する賢い方法だよ。このシミュレーターで「刻み幅h」を大きくしてみると、その違いが一目瞭然だ。
🙋
え、刻み幅を大きくするとどうなるんですか?上のスライダーでhを0.5くらいにしてみました…わあ、オイラー法(赤線)が厳密解(緑線)からどんどん離れていきます!
🎓
そう、これが「精度」の違いだ。オイラー法は荒っぽい予測だから、一歩が大きいとすぐに道を外してしまう。一方でRK4(青線)はまだ緑線にしっかり追従してるだろ?実務では、計算時間と精度のトレードオフを考えて方法を選ぶんだ。例えば、ゲームの物理エンジンなどリアルタイム性が大事な場面ではオイラー法が使われることもあるよ。
🙋
下の「誤差の対数グラフ」を見ると、オイラー法の線が右上がりで、RK4の線がすごく低い位置にあるのはなぜですか?
🎓
良いところに気づいたね!このグラフは「刻み幅h」と「最終的な誤差」の関係を表している。オイラー法の線の傾きは約1で、これは誤差が$O(h^1)$、つまりhに比例することを意味する。一方、RK4の線の傾きは約4で、誤差が$O(h^4)$だ。つまり、hを半分にすれば、オイラー法の誤差は1/2倍だけど、RK4の誤差は理論上$(1/2)^4 = 1/16$に激減する。シミュレーターで「h」を0.1から0.05に変えて「計算」ボタンを押して確認してみて。RK4の誤差の減り方が圧倒的だよ。

よくある質問

計算精度は向上しますが、計算ステップ数が増えるため処理時間が長くなります。また、浮動小数点誤差の蓄積が無視できなくなり、逆に誤差が増加する場合もあります。実用的には、誤差が収束する範囲で適切なhを選んでください。
刻み幅hを半分にしたとき、前進オイラー法の大域誤差は約1/2に減少しますが、RK4法では約1/16に減少します。例えばh=0.1の場合、RK4法はオイラー法より数桁小さい誤差で計算できるため、高精度が必要な場合に適しています。
1階常微分方程式の初期値問題であれば、任意の関数f(x,y)を設定可能です。ただし、解が急激に変化するスティッフな方程式では、刻み幅を極端に小さくしないとRK4法でも誤差が大きくなる場合があります。そのような問題には陰解法が適しています。
厳密解が未知の場合でも、刻み幅hを変えて計算結果を比較することで精度を評価できます。例えばhを半分にして結果がほとんど変わらなければ、解が収束していると判断できます。また、高次のRK4法と低次のオイラー法の差から誤差を推定することも可能です。

実世界での応用

構造動的解析(時刻歴応答解析):地震や衝撃による建物や橋の振動をシミュレーションします。運動方程式(2階の常微分方程式)を解くために、オイラー法やより高精度なニューマークβ法、ルンゲ=クッタ法が用いられます。計算の安定性が重要です。

宇宙機・ミサイルの軌道計算:惑星や衛星の軌道は重力の影響を受ける常微分方程式で記述されます。長期間にわたる高精度な計算が必要なため、RK4やそれ以上の高次ルンゲ=クッタ法、あるいは可変刻み幅の手法が標準的に使われています。

電気回路の過渡現象解析:スイッチを入れた瞬間からの電流や電圧の時間変化を求めます。回路方程式は常微分方程式系になるため、SPICEなどの回路シミュレータの内部でこれらの数値積分法が駆使されています。

CFD(数値流体力学)における粒子追跡:流体中を漂う微粒子や汚染物質の動きを追跡します。粒子の速度場が与えられた時、その位置は速度を積分することで求まり、これにオイラー法やルンゲ=クッタ法が適用されます。特に複雑な流れでは精度が重要です。

よくある誤解と注意点

まず、「RK4は常にオイラー法より優れている」と思いがちですが、実はそうとも限りません。確かに精度は圧倒的に高いですが、1ステップあたり4回も関数$f(x, y)$を計算するため、計算コストが約4倍になります。例えば、単純な振動現象を短時間だけシミュレーションする場合、オイラー法で刻み幅を十分小さくすれば、RK4と同等の精度をより短い計算時間で得られることもあります。常に「精度 vs 計算時間」のバランスを考えましょう。

次に、「刻み幅$h$を小さくすればするほど良い」というのも落とし穴です。確かに誤差は理論通り小さくなりますが、計算ステップ数が爆発的に増え、丸め誤差が蓄積し始めます。特にオイラー法では、$h$を極端に小さくしても、あるところから誤差が逆に増大する現象が見られることがあります。このシミュレーターで$h$を0.001や0.0001と極端に小さくして試してみると、理論と実測が完全には一致しない部分を観察できるはずです。

最後に、「この比較は1次元の常微分方程式だけの話」と限定して考えないでください。実務で扱うCAE問題、例えば構造物の振動(連立微分方程式)や流体の熱対流(偏微分方程式の時間発展)では、これらの手法が時間積分の基本部品として組み込まれています。RK4の考え方は、より高次元で複雑な系にも拡張されているのです。