2013-05-14 25 views
0

我试图在过去的50年中使用lsqcurvefit来适应美国的温度数据,但是我担心我的拟合函数的语法不好。Matlab拟合数据到一个函数,其中函数是一个求和和周期性的语法

拟合函数本身的形式是:

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

总结从i = 1至N.我想吨,以对应于所谓的时间的时间矢量。理想情况下,拟合应返回描述温度数据的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 [email protected](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

您的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) 
相关问题