振り子の運動を用いた常微分方程式解法のベンチマーク#
振り子の角度 \(\theta\) に関する運動方程式
\[
\ddot{\theta} = -\sin{\theta}
\]
に対して常微分方程式のソルバーを適用し,計算時間と誤差を測定した.
ステップ幅の自動調整付きのソルバーに対するベンチマーク結果#
以下の公式を用い,ステップ幅の自動調整機能 [11] 付きで実装したソルバーについてベンチマークを行った.
Runge-Kutta 法
陽的公式
半陰的公式
陰的公式
Rosenbrock 法
平均ベクトル場法 [20]
AVF2:2 次の解法AVF3:3 次の解法AVF4:4 次の解法
時刻 \(t=0\) における初期値をもとに時刻 \(t=10\) における解を求める時間と精度を測定した.
ステップ幅固定のソルバーに対するベンチマーク結果#
以下の公式を用い,固定のステップ幅による数値解法を実装したソルバーについてベンチマークを行った.
Runge-Kutta 法
シンプレクティック積分法
AVF (Average Vector Field) 法 [20]
AVF2:2 次の解法AVF3:3 次の解法AVF4:4 次の解法
時刻 \(t=0\) における初期値をもとに時刻 \(t=100\) における解を求める時間と精度を測定した.
環境#
CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
コンパイラ:Clang 21.1.8
ソースコード#
numerical-collection-cpp リポジトリ [1]
のコミット aada5a2ffd442f3ce90121ac78fac102a17b602d 時点のものを使用した.