B..1 はじめに

常微分方程式の初期値問題は、よくある問題で、 色々なプログラミング言語 (処理系) でシミュレーションできる。

現象数理学科で3年ゼミを受講している人は、 すでに常微分方程式の初期値問題の(数値) シミュレーションをしたことがあるはずである。 そのときにマスターして気に入っている方法があるならば、それを使って構わない。

私はずっと以前は、 Euler 法や Runge-Kutta 法を用いた C言語のプログラムを書く方法を学生に勧めていたが (やり方はネットで見られる桂田 [4] で説明してある)、 その後は Java や Ruby を使ったりして、 最近のゼミでは Mathematica や Python を使って卒業研究をした学生が多い。

偏微分方程式を解くことを考えると、 ゼミの中で Julia の利用を増やしたいと考えているが、 常微分方程式ならば Python で十分というか、 もしかすると今一番のお勧めかもしれない。

ここでは、Python と Julia での例を見せることにする。

どちらの場合も、最初に解こうとしている微分方程式を一階正規系、つまり

\begin{subequations}% 2022-02-9 20:18の式群
\begin{align}&\frac{\D\bm{x}}{\D t}(t)=f(\bm{x}(t),t)\\ &\bm{x}(t_0)=\bm{x}_0 \end{align}\end{subequations}

の形に変換する。

問題としては、Malthusモデル、単振動の方程式、Lorenz 方程式を取り上げる。 これは良く知られた問題であること、相空間の次元がそれぞれ $ 1$, $ 2$, $ 3$ であり、ある種の網羅性があることによる。



桂田 祐史