2017-07-27 284 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