Runge-Kutta 法は、常微分方程式の初期値問題の数値解法の一種である。
常微分方程式の初期値問題では、一つの未知変数とその従属変数から勾配が決まるシステムに対し、初期値を与えてそこを通過点とする経路を求める。よくある応用は、未知変数が時刻の場合で、これは初期状態からどのように時間発展するかを求めるのに等しい。
イメージとしては、時間を川の流れ、値をそこに浮かべた木の葉のように見立てるといい。
時間を細かく区切り、現時点の状況から次時点の状況を求め、そのステップの繰り返しで全体の時間発展を求める。
各ステップごとの計算には様々なバリエーションが知られている。
最も単純な方法である陽的 Euler 法では、現時点からの勾配をそのまま延長する。しかしこの場合、ステップ内での勾配の時間変化は完全に無視される。そのため、ステップ幅に対する誤差が大きくなってしまう。
そこで、精度を高めるために、現時点から次時点への経路付近にある複数の調査点について、それぞれの勾配の加重平均をとる。
なお、計算元となるそれぞれの調査点の位置についても、次時点を計算する場合と同様、他の調査点の勾配の加重平均から計算する。
どの調査点からどの調査点を求めるかについて、大きく分けて二種類の方法がある。
陽解法では、既知の調査点 (まずは現時点) から、一つずつ調査点を増やしていく。
陰解法では、未知の調査点も含め、それぞれの関係式をまとめ、連立方程式を解く。
それぞれの特徴については後述。
段数とは、1 ステップ辺りの調査点の数である。
次数とは、近似結果が Tayler 展開のどの次数まで一致するかである。
段数が増えると次数も増える傾向にあるが、必ずしも比例するわけではない。
よく使われる古典的 Runge-Kutta 法の場合、4 段 4 次である。
次時点の値は、それぞれの調査点での勾配の加重平均を現時点の値に加えて求める。
ここで、
同様に各調査点の値も、他の調査点での勾配の加重平均から求める。
ここで、
上述の
精度が良くなるような様々な値の組み合わせが調べられている。
Butcher 配列を使うと、それらを系統的に表記できる。
例えば、以下は古典的 Runge-Kutta 法の Butcher 配列である。
以下のような特徴がある。
陰解法に比べると、単純で実装しやすい。また、任意の問題に適用できる。なぜなら、陽解法に必要な作業は、勾配関数の適用とその結果の線形結合のみで、本質的に難しい内容が含まれていない。
ステップ幅に対して勾配が大きすぎる場合、時間を追うごとに誤差の絶対値が拡大して解が不安定になりやすい (このような特徴を持つ方程式は「硬い方程式」と呼ばれる)。
次数を上げて精度を上げれば、解の安定性も多少はましになるが、任意の次数をとる方法は 2025 年現在、計算機科学上の未解決問題である。そのため、次数を動的にはできず、すでに知られた特定の次数の解法を使うことになる。
陽解法に比べると、複雑で実装しにくい。また、特定の問題にしか適用できない。なぜなら、勾配関数が非線形の場合、それを含む連立方程式の解を解析的に表現できない事が多くなる。また、たとえそれが線形でも、巨大な連立線形方程式を高速に計算するには工夫がいる (直接法か反復法かなど)。
安定化しやすい。特に、Butcher 配列の上三角成分が優位、つまり陰解法中の陽解法としての特徴が少ない場合、それに伴い安定性が高まる。完全な陰解法では、元の関数が発散しなければ、計算結果も必ず安定化する。この特徴は陽解法が現時点から未来を予想する方向で計算するのに対し、陰解法では未来から現時点への逆算が適切に現時点へつながるよう調整していることによる。
陰解法では、任意の次数をとる方法 (Gauss–Legendre 法など) が知られている。
しかし、高次になると、内部で使用する連立方程式も解きにくくなる事が多い。