【发布时间】:2014-03-21 08:48:57
【问题描述】:
,我必须在数据上实现滑动窗口算法并进一步在循环内部执行操作,下面我已经写下代码,滑动窗口对于我们得到正确估计的前 500 个样本工作正常,但是当我们换了函数,估计好像是错的。
clc
clear all
close all
x=rand(1,1000);
y(2)=2;
y(3)=4;
y(4)=5;
for k=4:1:501
for i=k:1:k+10
y(i)=1.98*y(i-1)-1.284*y(i-2)+0.272*y(i-3)+4*x(i-1)+6*x(i-2)+8*x(i-3);
phi(i,:)=[ -y(i-1) -y(i-2) -y(i-3) x(i-1) x(i-2) x(i-3) ];
end
theta = (phi'* phi)\phi'*y';
thetaest(:,k)=theta;
end
for k=501:1:991
for i=k:1:k+10
y(i)=1.38*y(i-1)-0.576*y(i-2)+0.068*y(i-3)+4*x(i-1)+6*x(i-2)+8*x(i-3);
phi(i,:)=[ -y(i-1) -y(i-2) -y(i-3) x(i-1) x(i-2) x(i-3) ];
end
theta = (phi'* phi)\phi'*y';
thetaest(:,k)=theta;
end
提前致谢
【问题讨论】:
-
你应该在做所有这些任务之前预先分配你的
y数组,否则你会对你的表现很不满意;如所写,这是一个 Shlemiel the Painter 算法。在您的第一个循环之前执行y(991) = NaN以将y扩展到其最终大小,以避免Matlab 在每次数组迭代时重新分配整个事物。为了简洁起见,您可以使用y(2:4) = [2 4 5];。