常微分方程式の数値解法2
今回の講義は常微分方程式の数値解法のベクトル編です(従属変数がスカラーではない場合です;すなわち,前回の記号でいえば,\(d\) が \(2\) 以上の場合です).
例題として,\(d=2\) の場合の次の微分方程式を考えましょう:
\begin{equation}
\frac{\mathrm d}{\mathrm dt} \begin{bmatrix} q \cr p \end{bmatrix}= \begin{bmatrix} p \cr -q\end{bmatrix}, \quad \begin{bmatrix} q(0) \cr p(0) \end{bmatrix} = \begin{bmatrix} 1 \cr 0 \end{bmatrix} .
\end{equation}
前回の表記との対応は \(y = [q,p]^\top\) です.
この方程式は,調和振動子という微分方程式の特殊ケースで,厳密解は
\begin{equation}
\begin{bmatrix}
q(t) \cr p(t)
\end{bmatrix}
=
\begin{bmatrix}
\cos (t) \cr -\sin(t)
\end{bmatrix}
\end{equation}
です.すなわち,\((q,p)\)-平面において単位円を時計回りに運動します.
今回は,前回の陽的Euler法とRunge-Kutta法に加えて,symplectic Euler法とよばれる解法を実装してみましょう. Symplectic Euler法とは次のような解法です: \begin{align} q_1 &= q_0 + h p_0, \cr p_1 &= p_0 - h q_1. \end{align} \( p\) についての更新式の右辺の \( q_1\) がもし \(q_0 \) であれば陽的Euler法と一致します(ここだけが陽的Euler法と異なります). なお,一般には \begin{align} q_{n+1} &= q_{n} + h p_{n}, \cr p_{n+1} &= p_{n} - h q_{n+1} \end{align} です.
では,プログラムを見て課題を行っていきましょう.
課題
サンプルプログラムの中のsymplectic Euler法の関数を完成させ,CLEで提出してください. CLEで提出する際は,「テキスト情報の入力」欄に,自分で書いた関数の部分をコピーし,さらに,必要に応じて(添付した)図を参照しながら陽的Euler法との違いについての考察を書き,「ファイルの添付」から「ipynb ファイル」(名前は,ODE2_miyatake.ipynb のように自分の名前を入れてください)を添付してください.サンプルファイルはこちら