「ルンゲ=クッタ法」の版間の差分

削除された内容 追加された内容
新規作成 (会話 | 投稿記録)
2行目:
'''ルンゲ=クッタ法'''({{lang-en-short|Runge–Kutta method}})とは、[[数値解析]]において[[微分方程式]]の近似解を求める一連の方法である。この技法は1900年頃に数学者[[カール・ルンゲ]]と{{日本語版にない記事リンク|マルティン・ヴィルヘルム・クッタ|en|Martin Wilhelm Kutta}}によって発展された。
 
== 古典的な4次ルンゲ=クッタ法 ==
般に用い連のルンゲ=クッタ公式の中で最も広く知られているのが、'''RK4'''、'''古典的ルンゲ=クッタ法''' (もしく4次単に狭義 '''ルンゲ=クッタ法(RK4)''') などと呼ばれる4次公式である。
 
次の[[初期値問題]]を次のように設定す考える。
 
:<math> \dot y' = f(t, y), \quad y(t_0) = y_0. </math>
 
但し、''y''(''t'') が近似的に求めたい未知関数であり、その ''t'' における勾配は ''f''(''t'', ''y'') によって ''t'' 及び ''y''(''t'') の関数として与えられている。時刻 ''t''<sub>0</sub> における初期値は ''y''<sub>0</sub> で与えられている。
次に、RK4ではこの問題に対して次式を与える。
 
今、時刻 ''t''<sub>''n''</sub> における値 ''y''<sub>''n''</sub> = ''y''(''t''<sub>''n''</sub>) が既知のとき、ステップ幅 ''h'' に対して ''y''<sub>''n''+1</sub>, ''t''<sub>''n''+1</sub> を以下の式で与えると、これは ''y''(''t''<sub>''n''+1</sub>) の 4次精度の近似になっている。
:<math> y_{n+1} = y_n + {h \over 6} (k_1 + 2k_2 + 2k_3 + k_4) </math>
 
:<math>\begin{align}
:<math> y_{n+1} &= y_n + {h \over 6} (k_1 + 2k_2 + 2k_3 + k_4), </math>\\
t_{n+1} &= t_n + h.
\end{align}</math>
 
ここで、
 
:<math>\begin{align} k_1 &= f \left( t_n, y_n \right), \\
k_2 &= f \left( t_n + {h \over 2}, y_n + {h \over 2} k_1 \right), \\
k_3 &= f \left( t_n + {h \over 2}, y_n + {h \over 2} k_2 \right), \\
k_4 &= f \left( t_n + h, y_n + hk_3 \right) \end{align}</math>
 
である。すなわち、次の値 (''y''<sub>''n''+1</sub>) は、現在の値 (''y''<sub>''n''</sub>) に増分を加えたものであり、増分は勾配の推定値に間隔 (''h'') と推定された勾配の積加え乗じたものであになっている。その勾配の推定値、''k''<sub>1</sub>, ..., ''k''<sub>4</sub> の4つの勾配の重み付け平均で求める。''k''<sub>1</sub>, ..., ''k''<sub>4</sub> のそれぞれの勾配は、特定の (''t'', ''y'') に対する ''f'' によって与えられ、以下のように解釈できる。
 
*''k''<sub>1</sub> は初期値における勾配である。
*''k''<sub>2</sub> は区間の中央における勾配であり、勾配 ''k''<sub>1</sub> を用いて ''t''<sub>''n''</sub> + ''h''/2 における ''y'' の値を[[オイラー法]]により決定したものである。
 
*''k''<sub>31</sub> は区間の中央における勾配を再計算したものであり、最初 ''kt''<sub>2''n''</sub> の値から決められたにおける勾配である ''y'' の値を([[オイラー法]]で用いる勾配に一致する)
*''k''<sub>42</sub> は区間の最後における勾配であり、中央 ''kt''<sub>3''n''</sub> + ''h''/2 における勾配近似から決められたである ([[中点法]]で用いる勾配)。計算に用いる中央の ''y'' の値は、初期位置の勾配 ''k''<sub>1</sub> を用いて[[オイラー法]]で推定する。
*''k''<sub>23</sub> は区間の中央における勾配のもう一つの近似値であり、勾配る。中央の ''ky''<sub>1</sub>用いて ''tk''<sub>''n''2</sub> + ''h''/2 における ''y'' の値を[[オイラー法]]により決から推定したものであて用いる。
*''k''<sub>4</sub> は区間の最後 ''t''<sub>''n''</sub> + ''h'' における勾配の近似値であり、''k''<sub>3</sub> の値から推定された最後の点の ''y'' の値を用いる。
 
これら4つの重み付き平均を取るには、中央の勾配に対して大きな重み付け与え用いる。[[シンプソン則]]を用いた平均と同等の形になる。
 
:<math>\mbox{slope} = \frac{k_1 + 2k_2 + 2k_3 + k_4}{6}.</math>
 
RK4は4次の方法である。すなわち、厳密解とRK4の[[テイラー展開]]が4次の項まで一致する(たがって全体、1ステップの推定誤差は ''O''(''h''<sup>5</sup>) の[[ランダウの記号|オーダー]]になる。目的の時刻の ''y'' を求めるのに必要なステップ数は ''O''(1/''h'') になるので、全体の推定誤差は ''O''(''h''<sup>4</sup>) になる
 
== 陽的ルンゲ=クッタ法 ==