[英]Matlab fitting data to a function, where the function is a summation and periodic, syntax
我正在嘗試使用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的新手,不太了解如何使用匿名函數。 任何幫助將不勝感激。
謝謝閱讀
您的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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.