Python による数値計算の例題集である。Python の文法を学ぶ本というわけでもないし、 数値計算法を学ぶ本というわけでもない。たとえば、微分方程式もオイラー法で解いているなど、 数値計算法的にはあまり難しいことをしないで、Python はこんな感じで数値計算に使えるという紹介がなされている。 私のような Python の基礎を一応学んだ初心者で、ある程度の物理の素養がある人間がざっと見るのには良い。 すると、普通に数値計算するのに、Python のプログラムはどんな感じになるのかとか、 Python の文法やパッケージのうちどの程度のことを分かっていればよいのか、 といったことがわかる。
以下、少し誤記やわかりづらい点等の指摘(第1版第3刷):
- p.36 「単位となる電荷」とあるが、プログラムは正の電荷に引っ張られるようになっているので、 「単位となる負電荷」とした方が正確。
- p.36 p.39 のプログラムに合わせると、(9),(10) には負の符号を付けないといけない。すると、質点が -1 の電荷を持つことになる。
- pp.47-48 関数 odeint に与える引数 t が計算時刻のように書いてあるが(コメントが「0.01 秒刻みで計算」となっている)、 正確に言えば解を出力する時刻である(「~刻みで計算」という言い方は曖昧なので、著者は正しく理解しているかもしれない)。 odeint で使われているソルバ LSODA は可変ステップのソルバで、計算ステップは引数 t をどう与えるかに関わらず勝手に決まる。 公式マニュアルでは、このような誤解を招かないためにも odeint の使用は推奨しておらず、代わりに solve_ivp 関数の使用を推奨している。
- pp.63-64 プログラム gauss.py において、関数 forward(r) や backward(r,x) は戻り値を返さない形式で書いてあるが、 関数らしく戻り値を返す形式で書いた方がわかりやすい。リストが可変性のオブジェクトで、引数がそのオブジェクトを参照していることを考えると、 戻り値を返さない形式で大丈夫だということが分かるのだが、パッと見では値を戻していないのにどうして変わったのかよくわからず戸惑う。
- pp.70-72 プログラム glaplace.py において、3次元グラフの軸を描くのに from mpl_toolkits.mplot3d import Axes3D と ax = Axes3D(fig) の組み合わせが使われているが、これは昔のやりかたで、今の matplotlib では推奨されていない。 今推奨されているやりかたでは、ax = fig.add_subplot(111, projection='3d') である。
- pp.70-72 プログラム glaplace.py において、ax.plot_surface(X, Y, u, cmap = cm.coolwarm) としてあるが、 これは誤りである。Z 座標は ndarray 型でなければならない。ダウンロード版では修正されている。 U = np.array(u) として ndarray 型に直してから ax.plot_surface(X, Y, U, cmap = cm.coolwarm) とするのが正しい。
- p.74 図 3.11 で sin 型の境界値を与える境界の場所が間違っている。プログラムでは u[0][i] = ... としているので、 下側境界である。図では上側境界になってしまっている。それと、図では境界での大きい方の添え字を 101 としているが、 100 が正しい。それと下側境界を ui0 と書いてあるが、プログラムとそろえるなら u0i の方が わかりやすい(これは定義次第ではあるが)。
- p.75 図 3.12 (1) でも図 3.11 と同様のことが言える。
- pp.91-98 プログラム ca1.py, gca1.py において pp.63-64 と同様、返り値を戻さずにリストの中身を変える関数が使われている。 これはわかりづらいと思う。とはいえ、それ以降のプログラムでも同様のことがあり、それらを見ていくと、 プログラムがすっきりするという意味はあるので、だんだん悪くはないかという気にもなってきた。なので、以下はいちいち書かない。
- pp.113-115 プログラム traffic.py の境界条件の付け方がうまいのだが、説明がされていないので、最初意味が分からなかった。 左端の境界条件を ca[N-1] を 0 とし ca[N-2] を与えた流入率にしたがって適宜 1 に変えているのが巧妙 (説明がないということは、その道の人にはたぶん当たり前なのだろうけれど)。これによって、ca[N-2] は、渋滞していれば 必ず 1 になるし、渋滞していなければ流入率に従って 1 が現れるようになる。