技術書典4で「改訂版 流体計算で覚えるPython3」を頒布します

2018年4月22日に秋葉原UDXで開催される技術書典4にて,流体計算で覚えるPython3の改訂版を頒布します.

内容

流体の数値計算を題材として,Pythonを学習するための教材です.C言語やFortranで物理シミュレーションをしたことがある人や,何らかのプログラミング経験を有しているが流体計算に縁がなかった人に向けて作成しています.

Pythonは守備範囲が広すぎて手を出しにくい印象があるので,流体計算に題材を絞って,段階的にPythonを学習していくことをねらっています.

数値計算法の説明も丁寧にしており,流体計算を行うために必要な知識やテクニックを分解し,段階的に積み上げていきます.流体計算はアルゴリズム的には簡単な部類ですので,Pythonを知っている人が数値計算とはどのようなものかを学習するのにも適しています.

なぜこの資料を書いたか

いわゆるゴール指向の学習教材を作りたかったからです.Fortranユーザーの私がPythonを学習したとき,入門書籍に沿って学習していると「Pythonはこんな機能もあるんですよ!ほら!ほら!」と色々な機能を紹介されることに辟易しました.数値計算ではそれらの機能の大半を使わないからです.そういった使わない機能が大量に紹介されることで,数値計算を行う人が「なんか難しそうだから」と敬遠するのではと考えています.

誰に向けた資料か

上にも書いていますが,特にFORTRANしか使ったことのない人には一度試してもらいたいと思っています.型が右辺から決まらない暗黙の型宣言が,いかにひどい機能であるかを実感し,型の重要性に気付くでしょう.実行と同時に結果を可視化できる気楽さも,実際に味わってみないと分かりません.ωやνなどのギリシャ文字を変数名として使える素晴らしさも知れます.それと同時に,Python(特にnumpy)で好まれている機能の多くは,Fortranと同じ事ができるから好まれているのだということ,適当に書いても実行速度が速いというFortranの絶対的な優位性も知ることができます.

設計思想の異なる言語に触れることで,自ずとプログラミングに対する姿勢や意識が,よい方に変わっていきます.

改訂項目

この資料は,2017年4月29日に超技術書典で頒布した流体計算で覚えるPython3を改訂しています.主要な改訂の内容は以下の通りです.

matplotlibのインターフェース統一
matplotlibには,2通りのインターフェースが用意されています.改訂前の資料ではその二つを途中で切り替えていましたが,この資料では最初からオブジェクト指向インターフェースを用いています.

グラフの更新の高速化
流体現象は時間的に変化します.それを視覚的に確認するために,一つのグラブを書き換えながら,現象の移り変わりを確認しています.そのグラフの更新にかかる時間を大幅に短縮しました.plot, contour, plot_surface, imshow, quiverに対応しています.(資料中でも触れていますが,FuncAnimationは使いません)

処理の高速化の検討
いくつかの処理について,Python固有の事情を反映した高速化を行いました.その際の検討の様子を付録としてまとめました.C言語やFortranの経験者には当然と思える内容もあれば,非常に驚く内容もあります(私が驚きました).

異なる実行環境でのソースコードの統一
この資料はJupyter Notebook形式で頒布しており,Jupyterで実行することを想定していますが,Shellから実行する場合とソースコードを分けなくてもいいよう,実行環境を認識する方法と処理を切り替える方法をまとめています.

目次

第1章 Pythonの基礎
 1.1 Pythonとは
 1.2 変数と演算
 1.3 実行時間の計測
第2章 微分の計算法
 2.1 微分の近似
 2.2 誤差
 2.3 1次元配列(numpy)
 2.4 繰り返し
 2.5 実行時間の比較
第3章 後処理
 3.1 matplotlibによる可視化
 3.2 誤差の収束性
第4章 1次元移流方程式
 4.1 支配方程式
 4.2 時間積分の近似
 4.3 計算条件(初期条件と境界条件)
 4.4 計算結果
 4.5 計算結果の連続表示
第5章 1次元拡散方程式
 5.1 支配方程式
 5.2 計算条件(初期条件と境界条件)
 5.3 計算結果
 5.4 ユーザ定義関数
 5.5 main関数
 5.6 分岐
第6章 1次元Burgers方程式
 6.1 支配方程式
 6.2 計算条件(初期条件と境界条件)
 6.3 グローバル変数
 6.4 Unicodeの利用
第7章 2次元移流方程式
 7.1 支配方程式
 7.2 離散化と2次元配列
 7.3 matplotlibによる可視化と表示方法あれこれ
 7.4 2次元の1階差分
 7.5 計算条件(初期条件と境界条件)
 7.6 計算結果
 7.7 2次元拡散方程式
第8章 1次元Laplace方程式と1次元Poisson方程式
 8.1 支配方程式
 8.2 順問題と逆問題
 8.3 Laplace方程式の計算方法
 8.4 whileによる繰り返し
 8.5 SOR法
 8.6 Red-Black SOR法
 8.7 1次元Poisson方程式
第9章 2次元Laplace方程式と2次元Poisson方程式
 9.1 支配方程式
 9.2 計算条件と境界条件
 9.3 Red-Black SOR法
 9.4 Poisson方程式
第10章 Navier-Stokes方程式
 10.1 支配方程式
 10.2 計算方法
 10.3 計算条件
 10.4 境界条件
 10.5 計算結果
付録A 高速化検討
付録B matplotlib画面描画の高速化
付録C Python ShellとJupyter Notebookでのソースコードの統一

頒布情報

ダウンロードカードを頒布します.ダウンロードカードにはQRコードが印刷してあり,そのURLからzipで固められたJupyter Notebookをダウンロードします.B5冊子に換算すると,150ページほどあります.

この記事が気に入ったらサポートをしてみませんか?