すだちキャンパス

すだちキャンパス

やってみたこと、学んだことなどのメモ。

octaveでフィッティングしてみた(フィッティング編)

前回↓の続きです。

 

kabos.hatenablog.jp

 

 

 

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+")

 

ちなみに、フィッティングしたグラフの例です。

f:id:sweetgohan:20180822140705p:image

*1:x-p(2