octaveでフィッティングしてみた(フィッティング編)
前回↓の続きです。
1.どのように行うか
前回の記事で、「leasqr関数を使う」と書きましたが、その関数の使い方について書きます。
まず、フィッティングしたい関数Fを記述します(ちなみに、octaveは関数を先頭に書くと関数のファイルだと勘違いしてエラーになるので注意が必要です)。
また、パラメータの初期値p0を決めます。
そしたら、x,yをフィッティングしたいデータとして、
[f, p] = leasqr(x, y, p0, F)
と書くと、フィッティングできます。
fがフィッティングした後の(モデル的な)値、pが最適化されたパラメータになります。
2.初期値を決める(最重要)
ここが最も重要です。適切な初期値を決めることで、上手なフィッティングができるのです。
今回は、ガウシアンフィッティング なので、aとbの値を決めてcの値を計算して決めました。
3.フィッティング
いよいよフィッティングです。いままでのをまとめたコードは下のようになります。
p0=[0.93634;483100;24867]
#syokichi
function [F]=func(x,p)
F=p(1)*exp(-*1.^2)/(2*p(3)*p(3)))
endfunction
[f,p]=leasqr(X,I1,p0,"func")
plot(X,f)
hold on
plot(X,I1,"r+")
ちなみに、フィッティングしたグラフの例です。
*1:x-p(2