2017-07-27 191 views
0

我在修改矩阵之后,使用向量化并避免循环。Matlab:矩阵由向量正向递减

首先我得:

V = [x1 x2 x3 x4 x5] 

我设法与hankel函数来创建:

M = [1 2 3 4 5; 
    2 3 4 5 0; 
    3 4 5 0 0; 
    4 5 0 0 0; 
    5 0 0 0 0] 

repmat

A = [x1 x2 x3 x4 x5; 
    x1 x2 x3 x4 x5; 
    x1 x2 x3 x4 x5; 
    x1 x2 x3 x4 x5; 
    x1 x2 x3 x4 x5] 

而且我想知道如何结合MA得到

[x1 x2 x3 x4 x5; 
x2 x3 x4 x5 0; 
x3 x4 x5 0 0; 
x4 x5 0 0 0; 
x5 0 0 0 0] 

我不认为这是很难,但一直没能弄明白! 任何帮助非常感谢。由于

编辑:

汉克尔(V)的伎俩,感谢莫扎特。 虽然我并没有详细说明自己在执行速度方面有所增加(这在大多数情况下避免了循环)。

回答

4

你可以很容易地使用索引来做到这一点。

留下你V作为一个行向量,但增加了一个0到开始的,而不是使用repmat

V = [x1 x2 x3 x4 x5]; 
A = [0 V];   % add 0 to beginning of vector to account for 0s in output 
M = hankel(1:5) + 1; % Get indices of A which correspond to location in output 
output = A(M); 

>> output = [x1 x2 x3 x4 x5 
      x2 x3 x4 x5 0 
      x3 x4 x5 0 0 
      x4 x5 0 0 0 
      x5 0 0 0 0] 

还是不要摆在首位生成M,并直接使用hankel

V = [x1 x2 x3 x4 x5]; 
output = hankel(V) 

>> output = [x1 x2 x3 x4 x5 
      x2 x3 x4 x5 0 
      x3 x4 x5 0 0 
      x4 x5 0 0 0 
      x5 0 0 0 0] 
+0

感谢Wolfie,是的,我意识到,从一开始就直接使用hankel的伎俩。虽然与循环相比没有执行速度方面的收益(但我没有在我最初的问题中指出这是我所追求的。)。 – Pierre845