読者です 読者をやめる 読者になる 読者になる

作業中のメモ

よく「計算機」を使って作業をする.知らなかったことを中心にまとめるつもり.

【更新】レーベンバーグ・マーカート法と準ニュートン法(C 言語)

Linux プログラミング 数学

どうも,筆者です.

以前,同一のタイトルでレーベンバーグ・マーカート法と準ニュートン法の使い方を説明したが,あれは,Intel コンパイラがないと動作しないという欠点があった(また,3 次元のフィッティングが限界である).

workspacememory.hatenablog.com

他に良いものが無いか探していたところ,GNUPLOT の fit コマンドが精度良くフィッティングを行ってくれるという事が分った.ただ,これは 4 変数までしか使用出来なかった. 仕方ないので,ソースコードを軽く読んで,グローバル変数等を使用しない C 言語プログラムに落とし込むことを考えた.また,準ニュートン法に関しては,Numerical Recipes in C(Second Edition,1992,小学生の頃だ)が,公開されていたので,そこにあるソースコードを自分好みに変更して使用するようにした.このため,ソースコードの殆どの部分にコメントが入っていない.

ここでは,main 関数だけ紹介しておく.

プログラムとして,何が使いやすいか分らないが,main 関数にユーザー定義関数(フィッティング関数)を定義しておき,最適化のときにこの関数を利用するようにプログラムしてある.なので,ほぼ全ての関数にユーザー関数を引数として投げる形になっている.作ったときはこれで良いと思ったが,今考えると修正が一切出来ない不便なものになってしまっている.

ここにプログラムをおいておく.パスワードは【gm4tj6dv】である.英語が全く出来ていないのは勘弁して欲しい.苦手なので,ある程度調べてはいるが,それでも(変数名とか関数名とか)色々なところに間違いがある.

https://drive.google.com/folderview?id=0BxLebOn2HFHoRVJYMTdGTzNaY3c&usp=sharing

gcc を使う人は,Makefile の CC の部分を gcc に,CLIB の部分を -lm に変更する事.