首页 > 解决方案 > matlab中给定函数的时间序列逼近

问题描述

我正在尝试在 matlab 中拟合遵循这种函数的温度时间序列在此处输入图像描述

我需要检索函数的 8 个参数,将边界 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 开始,所以我首先添加了一个额外的列。

标签: matlabtime-seriesapproximationfunction-fitting

解决方案


推荐阅读