数値積分法の比較とは
🧑🎓
「オイラー法」と「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の誤差の減り方が圧倒的だよ。
物理モデルと主要な数式
このシミュレーターで解いているのは、一般的な1階常微分方程式の初期値問題です。
$$\frac{dy}{dx}= f(x, y), \quad y(x_0) = y_0$$
$x$は独立変数(例えば時間)、$y$は求めたい従属変数(例えば変位や温度)、$f(x, y)$は変化の割合(傾き)を表す関数です。初期条件として、$x=x_0$のとき$y=y_0$が与えられます。
前進オイラー法(1次精度)
現在の点$(x_n, y_n)$での傾き$f(x_n, y_n)$を使って、単純に一歩先を予測します。
$$y_{n+1}= y_n + h \cdot f(x_n, y_n)$$
$h$は刻み幅です。この方法は局所打ち切り誤差が$O(h^2)$、大域誤差が$O(h)$となります。
4次ルンゲ=クッタ法(RK4, 4次精度)
1ステップの中で4か所の傾きを計算し、それらを重み付け平均した傾きを使って予測します。これが高精度の理由です。
$$
\begin{aligned}k_1 &= f(x_n, y_n) \\
k_2 &= f(x_n + \frac{h}{2}, y_n + \frac{h}{2}k_1) \\
k_3 &= f(x_n + \frac{h}{2}, y_n + \frac{h}{2}k_2) \\
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)
\end{aligned}
$$
$k_1$は出発点の傾き、$k_2$と$k_3$は中間点の傾き、$k_4$は終点の傾きの推定値です。これらを組み合わせることで、$O(h^5)$の局所誤差、$O(h^4)$の大域誤差という高い精度が達成されます。
実世界での応用
構造動的解析(時刻歴応答解析):地震や衝撃による建物や橋の振動をシミュレーションします。運動方程式(2階の常微分方程式)を解くために、オイラー法やより高精度なニューマークβ法、ルンゲ=クッタ法が用いられます。計算の安定性が重要です。
宇宙機・ミサイルの軌道計算:惑星や衛星の軌道は重力の影響を受ける常微分方程式で記述されます。長期間にわたる高精度な計算が必要なため、RK4やそれ以上の高次ルンゲ=クッタ法、あるいは可変刻み幅の手法が標準的に使われています。
電気回路の過渡現象解析:スイッチを入れた瞬間からの電流や電圧の時間変化を求めます。回路方程式は常微分方程式系になるため、SPICEなどの回路シミュレータの内部でこれらの数値積分法が駆使されています。
CFD(数値流体力学)における粒子追跡:流体中を漂う微粒子や汚染物質の動きを追跡します。粒子の速度場が与えられた時、その位置は速度を積分することで求まり、これにオイラー法やルンゲ=クッタ法が適用されます。特に複雑な流れでは精度が重要です。
よくある誤解と注意点
まず、「RK4は常にオイラー法より優れている」と思いがちですが、実はそうとも限りません。確かに精度は圧倒的に高いですが、1ステップあたり4回も関数$f(x, y)$を計算するため、計算コストが約4倍になります。例えば、単純な振動現象を短時間だけシミュレーションする場合、オイラー法で刻み幅を十分小さくすれば、RK4と同等の精度をより短い計算時間で得られることもあります。常に「精度 vs 計算時間」のバランスを考えましょう。
次に、「刻み幅$h$を小さくすればするほど良い」というのも落とし穴です。確かに誤差は理論通り小さくなりますが、計算ステップ数が爆発的に増え、丸め誤差が蓄積し始めます。特にオイラー法では、$h$を極端に小さくしても、あるところから誤差が逆に増大する現象が見られることがあります。このシミュレーターで$h$を0.001や0.0001と極端に小さくして試してみると、理論と実測が完全には一致しない部分を観察できるはずです。
最後に、「この比較は1次元の常微分方程式だけの話」と限定して考えないでください。実務で扱うCAE問題、例えば構造物の振動(連立微分方程式)や流体の熱対流(偏微分方程式の時間発展)では、これらの手法が時間積分の基本部品として組み込まれています。RK4の考え方は、より高次元で複雑な系にも拡張されているのです。
関連する工学分野
このシミュレーターで体感した「時間積分」の概念は、実に多様な工学分野の根幹を支えています。例えば自動車の衝突安全シミュレーションでは、車体の変形と乗員の動きをミリ秒単位で追跡するため、時刻ごとに運動方程式を解きます。ここでは安定性が重視され、オイラー法の改良型である陰的解法が使われることが多いです。
また、制御システムの設計でも必須です。ロボットアームが目標位置に滑らかに移動する軌道を計算する時、各関節の角度と角速度の微分方程式をRK4のような高精度手法で解きます。刻み幅が粗いと制御が不安定になり、実際のロボットが暴走する原因にもなりかねません。
さらに一歩進むと、気象予測や気候シミュレーションのような超大規模計算にも応用されています。全球を格子で分割し、各格子点での風速や温度の時間変化を予測するのは、まさに巨大な連立常微分方程式の数値積分問題です。計算資源と精度のトレードオフが最もシビアに問われる分野と言えるでしょう。
発展的な学習のために
まず次のステップとしては、「連立常微分方程式」への適用を学ぶことを強くお勧めします。例えば、バネマスダンパ系の振動は、変位$y$と速度$v$という2つの従属変数を持つ連立系$dy/dt = v, \quad dv/dt = -(c/m)v - (k/m)y$で表せます。オイラー法やRK4は、この$y$と$v$を同時に更新する形に自然に拡張できます。
数学的な背景を深めたいなら、「テイラー展開」と「数値解法の導出」の関係を押さえましょう。オイラー法は関数を1次までで近似しているのに対し、RK4は実質的に4次までの情報を巧みに集めている、というイメージです。この「次数」の概念は、後で「有限要素法」や「有限体積法」といった空間離散化の精度を理解する時にも大いに役立ちます。
実用的な観点からは、「陽解法と陰解法」の違いを学ぶのが良いでしょう。オイラー法やRK4は「陽解法」で、次の状態が現在の状態から直接計算できます。一方、次の状態を求める方程式(多くの場合非線形)を解く必要がある「陰解法」は、計算コストは高い代わりに絶対安定という強力な性質を持ち、剛性の高い問題(例えばバネ定数が極端に大きい系)で威力を発揮します。このシミュレーターで学んだ「手法の選択」の重要性が、より高度なレベルで繰り返されるのです。