我试图在matlab中拟合一个温度时间序列,它遵循这种函数
我需要检索函数的8个参数,将其设为boundary lambda=0和sigma正。
我试过在matlab中使用lsqcurvefit函数,但是如果我有for循环的话,我就不能在这个内置matlab函数中使用y函数。
Torontoless=xlsread('temp.xlsx',2);
xdata=zeros(1,6576);
x=[0,0,0,0,0,0];
ydata=Torontoless';
Toronto=[zeros(size(ydata,1),1) ydata];
fun=zeros(1,6576);
for i=1:6576
fun(i)=(1-x(1))*(Toronto(i)-(x(2)+x(3)*Toronto(i)+x(4)*(sin(x(5)*Toronto(i)+x(6)))))+x(2)+x(3)*Toronto(i+1)+x(4)*(sin(x(5)*Toronto(i+1)+x(6)))+(randn-x(7))*x(8);
end
x0=[0,0,0,0,0,0];
lb=[-1000,-1000,-1000,-1000,-1000,-1000,0,0];
ub=[1000,1000,1000,1000,1000,1000,0,1000];
现在,我不知道如何利用函数内部的乐趣
x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
我不知道是否有更好的方法来适应这种时间序列,但让我知道,如果你有什么想法来解决这个问题。
谢谢。
PS温度矢量的大小是1x6576。因为我希望温度从0开始,所以我首先添加了一个额外的列。