I collected my scientific codes, especially math and physics.
Julia > samples > movie_0001.jl など, いくつかのファイルはこの readme に YouTube の対応動画へのリンクを貼っている. これは途中からはじめたのだが, わざわざ分離して readme に書くのも面倒になったので, ファイルに直接 URL を書くのを許すことにした. この目的なら gif にして Jupyter notebook を使うのも一手と思うが, Jupyter notebook は json で容量があり, 差分チェックもはてしなく鬱陶しい点で, 2020-04 時点では回避している.
どんなときに何をどうするといいかはいろいろ検討している.
Jupyter がすごいのでそれを使ったコードも書いてみたい. ここに行けばネット越しに Jupyter が使えるので, インストールしたりコマンド叩いたりがつらい人はとりあえずこちらで実験してみよう.
以下, インストールについての注意を書いておく. 2016-08 時点ではQiita のこの記事が参考になる.
詳しくはそちらを見てもらうことにして, ここでは簡単にまとめておく.
readme を書いた時点では次のバージョンで動かしている.
- Python 3.5.1 :: Anaconda 4.1.0 (x86_64)
ライブラリのバージョンも書いた方がいいのかもしれないが, それはサボる.
- 公式サイトからダウンロード, インストール.
Homebrew で次のコマンド実行でインストールした. brew upgrade でかなり時間がかかった. 注意してほしい.
また次のコマンドリストの # が入っている箇所では, # 以下は入力しないようにすること. コメントのつもりで書いている.
$ brew update && brew upgrade
$ brew install pyenv
$ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l
$ pyenv install -l | grep anaconda # Check the newest version
$ pyenv install anaconda3-4.1.0 # Input the newest
$ pyenv global anaconda3-4.1.0 # Input the newest
$ python --version
2016-08 時点で Python3 対応ができていないようだ. 計算物理の文献で VPython を使っているケースを見かけるので, Python3 に対応次第, こちらも追記したい.
本来はコマンドプロンプトやターミナル (いわゆる「黒いやつ」) で起動しないといけない. しかしこのハードルは高いだろうという気もする. そこでダブルクリックすれば自動で起動できるファイルを作った.
- jupyter/runjupyter.bat
- jupyter/runjupyter.command
Windows の方は bat ファイルを, Mac の方は command ファイルを使うこと. これを適当なフォルダに置いてダブルクリックで実行すれば, そのフォルダで jupyter が起動する.
jupyter/fundamental.ipynb にも書いておいたが, そもそも起動できないのに確認しようもない. 簡単に書いておく.
$ cd some_directory # 適当なディレクトリに移動
$ jupyter notebook
これでそのディレクトリ上で jupyter が起動する. ファイルを作ったりすると some_directory にファイルが作られる.
Jupyter Notebook については jupyter/fundamental.ipynb にまとめてあるのでそちら参照. 次のようなことがまとめてある.
- Markdown 記法が使えること
- mathjax が使えるので TeX が使えること.
- 簡単なキーバインドまとめ.
- Python の基礎の基礎.
- IPython の基礎の基礎.
簡単なものでもアニメーションやグラフを描けるのが楽しい. jupyter/fundamental.ipynb を軽く眺めたら, 次に jupyter/math_simple_graph.ipynb を見てほしい. あとは適当に書き進めていく.
速くて書くのも楽というので試してみる.
key | action |
---|---|
C-c C-a | activate if there is a Project.toml in parent directories |
C-u C-c C-a | activate home project |
C-c C-b | send whole buffer to REPL (using include) |
C-u C-c C-b | send whole buffer to REPL (directly) |
C-c C-c | send region (when applicable) or line to REPL |
C-c C-d | invoke @doc on symbol |
C-c C-e | invoke @edit on region (when applicable) or line |
C-c C-l | list methods of a function |
C-c C-m | expand macro |
C-c C-p | change directory to that of the buffer |
C-c C-s | prompt for buffer name suffix |
C-c C-t | send whole buffer to REPL (using Revise.includet) |
C-c C-v | prompt for Julia executable |
C-c C-z | raise the REPL or create a new one |
C-RET | send line to REPL (without bracketed paste) |
- bicycle1885 さんによるチュートリアル
- 公式ドキュメント
- 公式の高速化 tips
- JuliaBox を使えばブラウザさえあれば使える
- 真っ先にこれやりたい: Julia言語と Plots + GR で複素関数のgifアニメーションを作る
- 黒木さんの資料
- Plots.jl: Julia におけるアニメーションのしくみ
- Julia 集合
- Julia では高速に計算したいコードは函数の中に入れること
- 関数実行時に与えられた引数の型情報を使ってその函数をネイティブコードにコンパイルしてから実行する仕組みがあるため.
- 最初の実行時にはコンパイルにも時間が取られるので注意すること.
- Unicode の数学シンボルがタブで打てる
- Julia の REPL やいくつかの Julia 編集環境で使える: 少なくとも Emacs の julia-mode では使えた
- 例: δ -> \delta-tab
- 例: α̂₂ -> \alpha-tab-\hat-tab-_2-tab
次のコマンドで良さそう.
git clean -dnX ./ # まずこれでチェック
## git clean -dfX ./ # 実行: 本当に消えるので実行するときは要注意
- 本へのリンク
- 本のソースコードへのリンク
- パスワード入力しないとソースコードが取れないようになっているので, リポジトリにはコミットしない.
適当なタイミングで現代数学探険隊のプログラミング編を作りたい. そのための勉強.
- 非圧縮性粘性流体の数値計算法.
- 非圧縮粘性流体の特徴: 圧力を求める発展方程式がなく, 連続の式をみたす圧力をどう求めるか?
- 歴史的には各時刻で圧力のポアソン方程式を解く.
- これに時間がかかる.
- 格子ボルツマン法 (Lattice Boltzmann Method, LBM)
- 流体を微視的立場から捉える分子運動論を基礎にする
- 格子気体モデル: 流体を速度をもつ有限個の仮想粒子の集合で近似する
- 各粒子の衝突と並進を粒子の速度分布関数で逐次計算する
- 速度分布関数のモーメントから巨視的流れ場を求める
- 複雑な流れ場に対してもアルゴリズムが簡単
- 質量・運動量の保存性がいい
- 並列計算に適している
- https://qiita.com/ebinan92/items/6c61f660092a970bef1a
- https://github.com/ebinan92/Fingering_dynamics/tree/master/lattice_boltzmann
- https://snowtree-injune.com/2019/11/20/fem-truss-code/
- http://mechanics.civil.tohoku.ac.jp/bear/civil/node16.html
- https://qiita.com/damyarou/items/8ca3432f9bba20a1f5ea
- https://qiita.com/damyarou/items/85c7902cc658d748115e
- https://qiita.com/damyarou/items/320bad2052bb5fccd75f
- https://qiita.com/damyarou/items/aa7b23bafb44dabfa37f
- https://qiita.com/sasaco/items/ad06f769353cbe12e313
- http://civilyarou.web.fc2.com/WANtaroHP_F90_html5/jsubF90FEM.html
このページを参考にした. 可視化は python で gnuplot を生成してその gnuplot から png 生成し, ffmpeg で mp4 化. 後半にいくにつれて 10MB 程度ある csv を読み込んでは処理することになり, 処理が重くなるので軽量化したい.
ode_dynamical_system001.rs
同様.
これは「回転」.
ode_dynamical_system001.rs
同様.
これは「鞍点」.
可視化で新しいファイルを作らず,
ode_dynamical_system003_visualize.py
を転用している.
これは「不安定節」. 可視化は Python に切り替えた. いまの出力データ法からすると Gnuplot より Matplotlib を使う方がいい模様.
これは「安定節」.
うまく参考サイトのような図が描けなかった. 何が悪いのだろう?
- YouTube へのリンク
- math_memo.lyx に式と離散化メモあり
可視化は Gnuplot でやろうと思ったが, 方程式の解とベクトル場を同時に表示させられず断念した. Gnuplot の方が速そうなので, Gnuplot で何とかできるようになりたい.
- TODO: 動画にパラメータの情報を入れて何をどう変えているかわかるようにする
- YouTube へのリンク
- math_memo.lyx に式と離散化メモあり
- 予備考察として python 版を実行する
- 2 次元, 条件いろいろ Python で波動方程式の数値計算と動画 gif の書き出しをやらせてみよう
- FTCS 法 Pythonによる科学・技術計算 FTCS法(陽解法)による1次元・2次元波動方程式の数値解法,双曲型偏微分方程式
- 流体力学の方程式をpythonでシミュレーションする 1
このページを参考にして, 素直に波動方程式を解いている.
初期条件は math_memo.lyx
を見ること.
1dim_wave_eq_only_u.rs
では u
を直接動かしているが,
こちらは外力 f
で駆動しようとしている.
振幅が異様に小さく, なぜうまくいかないかまだわかっていない.
1dim_wave_eq_only_u.rs
と同じ条件で波を生成している.
両端に PML をつけていて反射が起きない.
1dim_wave_eq_pml_both_side.rs
に対して PML なしの波も追加した.
PML の有無での挙動を比較している.
Qiita: Processingでシミュレーション~境界付近で波を消すにある processing のコード,
processing/sketch_1dim_wave_eq_pml.pde
を直接移植したコード.
左端で駆動していて領域中央の cnf.nx / 2
から吸収壁が始まる.
元ネタはおそらく次の英語のノート.
PML は変則的な 1 階化を使う.
これは math_memo.lyx
にまとめた.
勘違いしないようにドキュメントをよく読んで注意すること.
1dim_wave_eq_pml_processing.rs
と原則同じ.
こちらは右端の 5 層の小領域で一気に吸収させている.
初期条件や波の駆動は 1dim_wave_eq_only_u.rs
と同じ設定にしている.
2 階の常微分方程式でよくやるように,
\begin{align} u_t = v, \quad v_t = u_{xx}. \end{align}
ふつうの 1 階化方程式で波源を中央につけた.
波源と PML を両方つけた. 比較用に PML なしの近似解も計算している.
math_memo.lyx
にある離散化の注意を守りつつ,
内部領域と PML 領域で解く方程式を変えている.
定式化については math_memo.lyx
を見ること.
境界値を 0 からずらしてうまくいくかどうか検証した.
中心を強制振動させ, それで波を起こしている. これだけだとわかりづらいが, PML つきの動画と比較すると反射が起こっていることがわかる.
上の動画と同じく中心を強制振動させ, それで波を起こしている. こちらは吸収壁をつけた. 上の動画と比較すると境界で反射が起きていないことがわかる.
PML の定式化については math_memo.lyx
参照.
次のリンク先の Julia コードを実装する.
- https://twitter.com/genkuroki/status/1245073613973123072
- https://twitter.com/genkuroki/status/1246083852251975680
Rust でもベクトル計算したいのだが, できる?
Python または Rust でコードを書いて貯めたい.
- http://www.math.sci.hiroshima-u.ac.jp/~awa/SUURI_11/saishuu.html
- http://nalab.mind.meiji.ac.jp/~mk/labo/text/wave.pdf
- https://twitter.com/genkuroki/status/1245079528692535298
- Haskell 荘園
- FDTD、粒子法、格子ボルツマン
- https://twitter.com/corymsimon/status/1225178682324475905?s=21
- 制御をJulia+Jupyterでやっているとかいう講義資料がある模様。
- https://twitter.com/kaisekigakumoyo/status/1225742614789533696?s=21
- Computational Linear Algebra for Coders (taught in Python with Jupyter Notebooks) 講義Youtubeつき
- Pythonでできる! 2次元コロイド結晶の構造解析https://qiita.com/kon2/items/c587fa826bf2134c8e1e
- 装飾パターンの法則 フェドロフ、エッシャー、ペンローズ https://honto.jp/netstore/pd-book_27281704.html
- https://twitter.com/ceptree/status/1238309859981844483?s=21
- CFD Julia: A Learning Module Structuring an Introductory Course on Computational Fluid Dynamics
- https://www.mdpi.com/2311-5521/4/3/159
- http://kamonama.blogspot.com/2009/02/blog-post_23.html
- 粒子法 http://www.hirax.net/mobile/content/8754
- 密度汎関数法・分子力場計算
- 有限要素法 アルゴリズムとプログラミング https://www.youtube.com/watch?v=nJqLA4nJosQ
- 分子動力学 https://qiita.com/sci_Haru/items/2b9696911cf0dc29738a
- https://qiita.com/tags/計算物理学
- 数値相対論
- https://twitter.com/doraneko_b1f/status/1241290303690047489 Linda J.S. Allen「生物数学入門―差分方程式・微分方程式の基礎からのアプローチ」を読んで差分方程式・微分方程式の勉強をしつつ、mathematical_biologyのリポジトリ(もちろんRust)を作っています。
- https://twitter.com/yuruyurau/status/1243147033742938112?s=21
- 高速フーリエ変換 https://caddi.tech/archives/836
- 桂田研卒研ノート
- 格子ボルツマン法オープンソース Palabosについて その1
- https://takun-physics.net/?p=4195
- https://github.com/termoshtt/eom
- https://twitter.com/genkuroki/status/1233657468409901056?s=21
- https://twitter.com/cometscome_phys/status/1243848172134227970?s=21
- http://www.tsunami.civil.tohoku.ac.jp/hokusai3/J/shibu/19/araki.pdf
- 有限体積法の解説:https://qiita.com/ur_kinsk/items/03e8e20c51a434e50c9c
- 行列分解
- 差分でPDE解いて境界の扱いを間違えないようになるまで練習する、というのは根本的に間違えているということを理解してほしい
- An Interactive Introduction to Fourier Transforms
- Processing
- いろいろなアニメーションサンプル
- マンデルブロー
- https://twitter.com/RaviSubbie/status/1256986465881513984
- 円
- https://twitter.com/jmitani/status/1256224294499123201
- Rust 有限体積法 1 次元の線型移流方程式 アニメーションサンプル 数値流体解析の基礎 Visual C++とgnuplotによる圧縮性・非圧縮性流体解析
コードは GitHub に置いてあるので興味があればどうぞ.
対応するのは次のコードです. ファイル・ディレクトリ整理で指定の場所にない場合は上の mathcodes から適当に探してください.
これ以外に, 数学・物理・プログラミングに関する無料の通信講座を運営しています. もしあなたがご興味あるなら, ぜひ次の通信講座ページ一覧を眺めてみてください.
他にも YouTube で数値実験の動画を投稿しています. リストにしているのでこちらもぜひどうぞ.
GitHub でもいくつかコードを公開しています.
ぜひチャンネル登録もしてください。