Аппроксимация временного ряда с заданной функцией в matlab

Я пытаюсь вписать в Matlab температурный ряд, который следует за такой функцией

Мне нужно было бы получить 8 параметров функции, указав в качестве границы lambda=0 и сигма-положительное значение. Я попытался использовать функцию lsqcurvefit в matlab, но я не могу использовать функцию y внутри этой встроенной функции matlab, если у меня есть цикл for.

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, я сначала добавил дополнительный столбец.

0 ответов

Другие вопросы по тегам