ほぼ自分用メモ:juliaで微分方程式を解く

2020/10/26

メモ

t f B! P L


一日中、juliaで微分方程式を解く方法を調べて

使えるようになったのでメモしておきます。

紆余曲折ありましたが、使えるようになった今は感謝しかありません

今までC言語でルンゲクッタ法を愚直に書いていましたが

旧石器時代からいきなり明治維新が起こったぐらいの文明開化をしました。

これで残りの人生でもう、ルンゲクッタ書かなくても良いと思うと・・・(涙)


DifferentialEquations という神パッケージに全てが詰まっているので

この公式ドキュメントを読めば、全部書いてあります。

DifferentialEquations.jl: Scientific Machine Learning (SciML) Enabled Simulation and Estimation

This is a suite for numerically solving differential equations written in Julia and available for use in Julia, Python, and R. The purpose of this package is to supply efficient Julia implementations of solvers for various differential equations.


が、自分に最も必要だったオプション

save_everystep=false (中間結果を保持しない)

を発見するまで紆余曲折ありました。


あと、f(u,p,t) などで、謎すぎた p という引数の正体は

外から持ち込むパラメータだったようです。

それで、これを使う時は ODEProblemの最終引数に代入が必要です。

memory allocationを減らすための、作業用メモリも

これを通じて持ち込めます


最後に、最適化については、次のサイトを発見してとても役立ちました

Optimizing DiffEq Code

Chris Rackauckas In this notebook we will walk through some of the main tools for optimizing your code in order to efficiently solve DifferentialEquations.jl. User-side optimizations are important because, for sufficiently difficult problems, most of the time will be spent inside of your f function, the function you are trying to solve.


juliaでは特に意図しないメモリ割り当てによる

パフォーマンス低下が起きやすいので注意が必要です。

あと @inbounds も果敢に使うと良さそうです。


めっちゃいい道具を手に入れたので

明日からはこれを使って研究する!


このブログを検索

ブログ アーカイブ

自己紹介

自分の写真
東京大学 物性研究所 (柏キャンパス) で物性物理学の理論研究をしています。 ブログは最近撮り始めた写真の公開と日記を中心につらつら書くつもりです。 ごくたまに、研究活動に関わる有益な情報を発信出来たらいいなと思っています。

QooQ