vec_op.hpp

RK4.hpp

oscillator.cpp

2oscillator.cpp

double_chaotic_bg.cpp

double_chaotic_ptb.cpp


https://ja.wikipedia.org/wiki/ルンゲ=クッタ法

運動方程式が微分方程式である以上、常微分方程式を解くことは物理において必須である。運動方程式は2階の微分方程式

$$ \frac{\mathrm{d}^2x}{\mathrm{d}t^2}=f\left(t,x,\frac{\mathrm{d}x}{\mathrm{d}t}\right), $$

であるが、これは次のように分解できるので

$$ \begin{cases}\displaystyle\frac{\mathrm{d}x}{\mathrm{d}t}=v, \\[5pt]\displaystyle\frac{\mathrm{d}v}{\mathrm{d}t}=f(t,x,v),\end{cases} $$

連立1階常微分方程式が解ければ任意自由度の系が解けることになる。

$$ \frac{\mathrm{d}\mathbf{x}}{\mathrm{d}t}=\mathbf{f}(t,\mathbf{x}), \quad \mathbf{x}=(x_1,v_1,x_2,v_2,\cdots). $$

連立1階常微分方程式の数値解法には (4段) 4次 Runge—Kutta (RK4) が非常によく使われる。一般に Runge—Kutta 法は

$$ \mathbf{x}(t+\Delta t)\simeq\mathbf{x}(t)+\Delta t\sum_{i=1}^sb_i\mathbf{k}_i, $$

$$ \mathbf{k}i=\mathbf{f}\left(t+c_i\Delta t,\,\mathbf{x}(t)+\Delta t\sum{j=1}^sa_{ij}\mathbf{k}_j\right), $$

の形にまとめられ、各アルゴリズムは係数 $a_{ij}$, $b_i$, $c$ で特徴づけられる。係数は次のような Butcher 配列でよく表記される。

$$ \begin{array}{c|cccc}c_1 & a_{11} & a_{12} & \cdots & a_{1s} \\ c_2 & a_{21} & a_{22} & \cdots & a_{2s} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ c_s & a_{s1} & a_{s2} & \cdots & a_{ss} \\\hline & b_1 & b_2 & \cdots & b_s \end{array} $$