趣味で計算流砂水理

Computational Sediment Hydraulics for Fun

アジョイント法と降下法と

あけましておめでとうございます。 今年は暴れます。

python

年末から取り組んでいましたが、fortranのアジョイント法をテスト用にpythonで書いてみました。 一応双子実験の同化結果の水深です。流下距離40kmで、0,20,40kmの結果です。完璧です。

f:id:SedimentHydraulics:20180106004104p:plain

fortranだと数千行のコードが300行程度です。嫌になりますね。もう少しまとまったらgitにあげようかと。

ただ、速度面のデメリットは相当あります。

DBに置いておきます。勉強会の議題にでも。

降下法

実は降下法のチェック用に書きました。 共役勾配法を使っていましたが、準ニュートン法にしようかと考えていました。 自分で書くのは大変なので、ググると、

http://users.iems.northwestern.edu/~nocedal/lbfgsb.html

が引っかかりました。fortranだし丁度いいなと。修正BSDだし。 ソースめっちゃ汚いです。名前だけのf90で実態はf77です。

ただ、降下法の速度を比較するため、pythonで作業していたので、python版も無いかと探していると、scipyにoptimizeのライブラリがあり,それを使うことにしました。

そこで、scipyのlbfgsbのソースを読んでいると面白いことに気付きました。 なんと、上のソースをf2pyで変換しただけです。

https://github.com/scipy/scipy/tree/master/scipy/optimize/lbfgsb

scipyも公開コードを使うんだな思いました。