0

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 を初めて使用し、無名関数の使用方法をよく理解していません。どんな助けでも大歓迎です。

読んでくれてありがとう

4

1 に答える 1