Matlab:由向量向前递减的矩阵

时间:2017-07-27 12:59:20

标签: matlab matrix

我在改变矩阵之后,使用矢量化和避免循环。

首先我得到了:

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]

我不认为这很难但却无法弄清楚! 任何帮助非常感谢。感谢

编辑:

Hankel(V)诀窍,谢谢Wolfie。 虽然我在执行速度方面获得了一些提升后没有明确指出(这是大多数时候避免循环所固有的)。

1 个答案:

答案 0 :(得分: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]