数値ODE解法比較 戻る
数値解析・計算科学

数値ODE解法比較シミュレーター

オイラー・ホイン・RK2・RK4・RK45法を同一問題で比較。刻み幅による精度・安定性の違いを可視化。ロジスティック成長・ファン・デル・ポール振動子・ローレンツ方程式のプリセット付き。

方程式の選択
数値解法の選択
刻み幅・時間範囲
刻み幅 h
終了時間 T
s
計算結果
ステップ数
収束次数
OFF
Exact overlay
ODE解
刻み幅スライダーを動かして各手法の精度差を確認しよう。
理論・主要公式
オイラー: O(h) 1次
ホイン: O(h²) 2次
RK4: O(h⁴) 4次
刻み幅を½にすると
RK4の誤差は1/16倍

数値ODE解法比較シミュレーターとは

🙋
「数値ODE解法」って何ですか?オイラー法とかRK4とか、色々種類があるみたいですが、どれを使えばいいかわかりません。
🎓
大まかに言うと、微分方程式をコンピュータで解くための「計算レシピ」の違いだね。一番シンプルなオイラー法は、今の傾きをそのまま使って未来を予測する。でも、これだと誤差が大きくなりやすいんだ。上のシミュレーターで「刻み幅 h」を大きくしてオイラー法だけ動かしてみると、すぐに真の解から離れてしまうよ。
🙋
え、そうなんですか?じゃあ、RK4(ルンゲクッタ4次)って名前がかっこいいやつが一番いいんですか?
🎓
精度だけ見ればそうなるね。でも、RK4は1ステップ進めるのに4回も関数を計算するから、オイラー法より4倍コストがかかる。実務では「精度」と「計算時間」のトレードオフを考えるんだ。例えば、自動車のサスペンション振動をシミュレーションするとき、リアルタイム性が求められる制御系ではオイラー法、詳細な解析にはRK4を使うことが多いよ。このツールで「ロジスティック成長」を選んで、同じ刻み幅で各手法を比較してみて。
🙋
なるほど。でも、RK45って「5」が付いてるからもっとすごいんですか?刻み幅が自動調整ってどういうこと?
🎓
その通り!RK45(Dormand-Prince法)は賢いやつで、4次と5次の解を同時に計算してその差を「誤差の推定値」として使うんだ。シミュレーターで「ファン・デル・ポール振動子」を選んで、RK45とRK4を比較してみよう。RK45は解が急激に変化する部分では自動的に刻み幅を細かくし、なだらかな部分では粗くする。だから、全体として効率よく高精度な解が得られる。SciPyやMATLABの標準ソルバーでも使われている現場必須の手法だね。

よくある質問

オイラー法は最も単純で精度が低く、刻み幅を小さくしないと誤差が大きくなります。ホイン法・RK2はその改良版、RK4は高精度で安定、RK45は刻み幅を自動調整する適応的解法です。精度と計算コストのバランスが異なります。
刻み幅が大きいと計算は速いが誤差が増え、不安定になる場合があります。小さくすると精度は向上しますが計算時間が増えます。特にオイラー法では刻み幅が大きすぎると発散することもあるため、適切な値を試しながら比較してください。
ロジスティック成長は人口や資源の増加・飽和、ファン・デル・ポール振動子は非線形な自励振動(電子回路や生体リズム)、ローレンツ方程式はカオス的な気象モデルです。各モデルで解法の安定性や精度の違いを観察できます。
主な原因は刻み幅が大きすぎることです。特にオイラー法や陽的解法では、安定性条件(CFL条件など)を満たさないと発散します。刻み幅を小さくするか、RK45のような適応刻み幅法を選ぶと改善します。

実世界での応用

機械・自動車工学:エンジンのピストン運動やサスペンションの振動解析に利用されます。リアルタイム制御が必要なECU(エンジン制御ユニット)内の計算では計算コストの低いオイラー法が、設計段階での詳細な性能評価にはRK4やRK45がよく用いられます。

電気・電子回路シミュレーション:トランジスタやオペアンプを含む非線形回路の過渡応答を計算するために必須です。スイッチングの瞬間など電圧・電流が急激に変化する部分では、RK45のような刻み幅制御機能を持つ手法が威力を発揮します。

化学反応・生物増殖モデリング:複数の化学物質が関与する反応速度論や、人口増加のロジスティック方程式の予測に使われます。反応速度が速い物質と遅い物質が混在する「硬い方程式」では、解法の選択が計算の成否を分けます。

気象・流体シミュレーション(CFD):ナビエ-ストークス方程式を時間方向に離散化する際の時間積分スキームとして応用されます。乱流の計算などでは膨大な計算コストがかかるため、精度と効率を両立させる高度な解法が研究されています。

よくある誤解と注意点

まず、「高次=常に正義」ではないという点を押さえよう。確かにRK4はオイラー法より圧倒的に精度が高い。しかし、例えば制御システムのリアルタイムシミュレーションのように、計算速度が最優先で、多少の誤差がフィードバックループで吸収される場合は、オイラー法が採用されることもある。このツールで「ロジスティック成長」を選び、刻み幅h=1.0で各手法を比較してみてほしい。RK4とオイラー法の結果は大きく違うが、h=0.1まで細かくすると、オイラー法でも実用に足る解に近づく。つまり、「刻み幅」と「次数」はトレードオフの関係にあるんだ。

次に、「安定性」を見落とさないでほしい。例えば「ファン・デル・ポール振動子」で、刻み幅をh=2.0など非常に大きく設定してオイラー法を実行すると、解が発散してグラフが吹き飛ぶことがある。これは数値的不安定性と呼ばれる現象で、手法によって許容できる刻み幅の上限が違う。実務では、計算が破綻しない安定した刻み幅を事前に見積もることが必須だ。

最後に、RK45の「自動刻み幅制御」を過信しないこと。これは万能ツールではなく、許容誤差(ツール内の「許容誤差」パラメータ)という目標精度をユーザーが設定する必要がある。許容誤差を甘く(例えば1e-3)設定すると計算は速いが粗い解に、厳しく(1e-9)設定すると高精度だが計算コストが跳ね上がる。常に「どの程度の精度が必要か」という要求仕様から逆算してパラメータを決めよう。

使い方ガイド

  1. 初期条件(y0)と時間区間[t0, tf]を設定し、ステップ数またはODE選択肢からローレンツ方程式(σ=10, ρ=28, β=8/3)やvan der Pol(μ=1.0)を選択
  2. 刻み幅hを変更(0.001~0.1の範囲推奨)して、Euler法・Heun法・RK4・RK45の4つの解法を同時に実行し、各ステップ数を確認
  3. Exact overlay機能でBifAD有限差分法による参照解と比較し、各解法の誤差(相対誤差%表示)と計算時間を数値化

具体的な計算例

ローレンツ方程式(初期値y0=[1,1,1], t0=0, tf=20)でh=0.01の場合:Euler法は700ステップで相対誤差12.5%、RK4は175ステップで誤差0.08%、RK45は適応刻み幅で平均h=0.012相当の誤差0.003%を達成。tf=50では刻み幅h=0.005時にHeun法の収束次数2次が確認でき、RK4の4次との精度差が顕著(RK4誤差0.0001%)。

実務での注意点

  1. Euler法は計算速度が最速(ステップ数少)だが誤差が大きく、カオス系ローレンツ方程式では軌道が発散しやすいため非推奨;振動が小さい拡散方程式ならhc≧0.01でも許容
  2. RK4は一般汎用で工業シミュレーション標準だが、剛体(stiff)系(化学反応プロセス、電力系統)ではhが小さすぎて計算負荷増加;その場合RK45の適応機能が自動最適化
  3. hを半減させて誤差が4乗低減(RK4の次数4)することで解法検証可能;hが小さすぎると丸め誤差が増加するため、相対誤差カーブの極小値近傍で最適hを選定