lsqcurvefit を使用して、過去 50 年間の米国の気温データを当てはめようとしていますが、当てはめ関数の構文が正しくないことが懸念されます。
フィッティング関数自体は次の形式です。
∑(ai+bi*t+ci*t^2)*(cos(vt+p))
i=1 から N までの合計です。t を TIME という時間ベクトルに対応させたいと思います。理想的には、フィッティングは温度データを表す a、b、c、v、および p の値を返す必要があります。
私は毎日の最高気温、TMAX と呼ばれるベクトルを当てはめようとしています。
これまでのところ、私は持っています:
lsqcurvefit(fitFn(1,2,TIME),5,TIME,TMAX)
fitFn はスクリプトで次のように定義されます。
function f = fitFn(i,N,t)
f=0;
for i=1:N
f =@(i,N,a,b,c,v,p,t) f + (a+b*t+c*t^2)*(cos(v*t+p));
end
ただし、lsqcurvefit を実行するたびにエラーが発生します
Error using
fitFn>@(i,N,a,b,c,v,p,t)f+(a+b*t+c*t^2)*(cos(v*t+p)) (line
4)
Not enough input arguments.
Error in lsqcurvefit (line 199)
initVals.F =
feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Caused by:
Failure in initial user-supplied objective function
evaluation. LSQCURVEFIT cannot continue.
私は単純なエラーを犯していると確信していますが、やや途方に暮れています。私は MatLab を初めて使用し、無名関数の使用方法をよく理解していません。どんな助けでも大歓迎です。
読んでくれてありがとう