我正在尝试使用 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 的新手,不太了解如何使用匿名函数。任何帮助将不胜感激。
谢谢阅读