常微分方程式の数値解法のうち基礎的な手法をまとめました。
はじめに
3DCGで物理シミュレーションを行う際には常微分方程式を解く必要が出てきます。
しかしながら常微分方程式のうち解析的に解くことのできる問題は少ないため、
漸化式を用いて逐次計算を行う数値解法を用いることになります。
常微分方程式の数値解法はその性質上結果に誤差が生じ、その誤差を小さくするため多くの手法が存在します。
また手法により計算速度も異なるので、用途に応じて適したものを選択する必要があります。
そこで本記事ではこの常微分方程式の数値解法について、いくつかの基礎的な手法をまとめます。
オイラー法
最初に最もシンプルな方法であるオイラー法について説明します。
まず常微分方程式の解をとしたとき、の周りでテイラー展開すると以下の式を得られます。
ここで、
とすると式(1)は以下のように表せます。
ここでが十分に小さいとすると、上式においてランダウの記号であらわしている項は無視できるので、
オイラー法はこのようにシンプルな式で計算できますが、その分誤差が多い方法となります。
試しにをこの方法で解くと、以下のような結果となります。
微妙に誤差があることが見て取れます。
ホイン法
前節のオイラー法は精度が悪いため、より精度の良い方法としてホイン法があります。
ホイン法は2次のルンゲクッタ法と呼ばれる手法のうちの一つという位置づけになります。
オイラー法の精度の悪さは時点の解を求めるために時点での値(傾き)を用いている点にあるので、
ホイン法では以下のように時点の値も計算に組み込みます。
このの値は前節のオイラー法により求めます。
このケースでは前節の結果に比べてかなり誤差が目立たなくなりました。
4次のルンゲクッタ法
より精度の高い結果を得やすい方法として4次のルンゲクッタ法という手法があります。
これもさらにいくつかの手法に分かれるのですが、本記事ではこのうちの一つである4段4次の公式を紹介します。
4段4次のルンゲクッタ法ではまず以下のようにからの値を求めます。
次にこれらの値を使って以下の式により解を求めます。
この手法を用いると前節までの方法に比べてがある程度大きくても誤差の少ない結果を得られますが、
見ての通り計算コストも大きいため、目的に適した手法を選択する必要があります。