Matlab将数据拟合到函数中,其中函数是求和和周期性语法

时间:2013-05-14 05:05:24

标签: matlab

我试图使用lsqcurvefit来适应美国过去50年的温度数据,但我担心我的拟合函数语法错误。

拟合函数本身的形式为:

∑(ai+bi*t+ci*t^2)*(cos(vt+p))

从i = 1到N求和。我想对应于称为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的新手,并不太了解如何使用匿名函数。任何帮助将不胜感激。

感谢您阅读

1 个答案:

答案 0 :(得分:1)

你的fitFn非常错误。我想这就是你想要的:

f = @(x,t) (x(1)+x(2)*t+x(3)*t.^2)*cos(x(4)*t+x(5))
lsqcurvefit(f,zeros(1,5),TIME,TMAX)