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