Py

MATLABで非線形最小二乗問題を解く

Memo
指数関数のフィッティング編

%データを用意
xdata = [1:30];
ydata = 3*exp(0.04*xdata)+5+2*rand(1,30)-1;

%xを係数としてフィッティングしたい関数をインラインで作成
fun = inline('x(1)*exp(x(2)*xdata)+x(3)','x','xdata');

%lsqcurvefit(フィッティングをしたい関数,パラメータの初期値,x方向のデータ,y方向のデータ)
x= lsqcurvefit(fun, [6 0.1 6], xdata, ydata)
plot(xdata,ydata,'b*',xdata,x(1)*exp(x(2)*xdata)+x(3),'k-');
title('指数関数のようなデータをフィッティング'),legend('実験データ',sprintf('近似曲線 : %0.1f*exp(%0.2f*x)+%0.1f',x(1),x(2),x(3)),2)

初期値の選び方によってはちゃんとフィッティングできないから注意
あとなんとかToolboxが入ってないと出来ないかも的だったらごめんなさい。