2014-11-25 28 views
2

我试图实现此公式:expressionMatlab:索引向量的正确方法;索引时间序列的矩阵维度错误

其中y(t)是自回归过程AR(2)的输出。以相等的间隔t = 1,2,...,5000个数据采样。 p = 2。该代码引发错误

Error using - 
Matrix dimensions must agree. 

这是因为我不知道如何表示存储在变量L1索引符号的滞后。有人可以帮助缓解这个错误,通过显示正确的方式来索引?这就是我所做的:

var_eps = 1; 
epsilon = sqrt(var_eps)*randn(5000,1); % Gaussian signal exciting the AR model 
Y(1) = 0.0; 
    Y(2) = 0.0; 
    for n= 3:5000 
    Y(n)= 0.1950*Y(n-1) -0.9500*Y(n-2)+ epsilon(n); %AR(1) model 
    end 
p=2; 
t= p+1; 
rho0 = randn(); %c 
phi1 = 0.1950; 
phi2 = -0.9500; 
L1 = (Y(t:end) - rho0 - phi1.*Y(2:end) - phi2.*Y(1:end)).^2; 

L11 = sum(L1); 
+1

您需要确保'L1'中的所有术语具有相同的大小。提示:你可以在索引中使用像'end-1'这样的术语。 – nkjt 2014-11-25 10:54:28

+2

如果你定义't =(p + 1):5000;',你可以用'L1 =(Y(t) - rho0 - phi1。* Y(t-1) - phi2 。* Y(t-2))。^ 2;' – 2014-11-25 10:59:49

回答

0

这是因为Y(t:end)Y(2:end)Y(1:end)都是不同的长度,所以你不能增加或减少它们。可能更易于使用for循环:

L1 = 0; 
for t=p+1:5000 
    L1 = L1 + (Y(t) -rho0 - phi1*Y(t-1) - phi2*Y(t-2))^2; 
end 
+0

谢谢您的回复。我也有兴趣知道是否有索引规则。我碰到过y(t)写成y(2:end-1); y(t-1)= y(1:end-1)等等。我很困惑什么时候把end-1放到哪一个索引上。 – SKM 2014-11-25 20:57:00

+0

'1:end-1'的意思是“从1开始,以一步的步骤前往所讨论的向量的最后一个元素”。设想'x'是一个长度为5的向量,则'x(1:end-1)= [x(1)x(2)x(3)x(4)]'。就我个人而言,我不是矢量化符号的忠实粉丝,并倾向于支持'for'循环,我只处理标量。我知道从计算的角度来看效率并不高,但我发现代码更具可读性和可理解性。 – am304 2014-11-25 21:23:46