2014-09-24 139 views
0

我有行和列中的matlab:MATLAB:如何通過移位向量創建矩陣

A = [1 0 3 ... a_k]; - 行1xk

b = [1; 0; 3; ... b_k]; - 列KX1

我要創建新的矩陣的(A和B)墨西哥比索,可以通過轉移的行和列來填充:

A = [1 0 3 0 0 0 0 ... 0; 
    0 1 0 3 0 0 0 ... 0; 
    0 0 1 0 3 0 0 ... 0; 
    ... 
    0 0 0 0 0 0 ... 1 0 3 ] 

B= [1 0 0 0 0 0 0 ... 0; 
    0 1 0 0 0 0 0 ... 0; 
    3 0 1 0 0 0 0 ... 0; 
    0 3 0 1 0 0 0 ... 0; 
    0 0 3 0 1 0 0 ... 0; 
    ... 
    0 0 0 0 0 0 0 ... 3] 

我該怎麼辦呢?

回答

1

這是你想要的嗎?

>> a = [1 0 3]; 
>> m = 5; %// number of rows 
>> A = convmtx(a,m) 
A = 
    1  0  3  0  0  0  0 
    0  1  0  3  0  0  0 
    0  0  1  0  3  0  0 
    0  0  0  1  0  3  0 
    0  0  0  0  1  0  3 

>> b = [1;0;3]; 
>> m = 4; %// number of columns 
>> B = convmtx(b,m) 
B = 
    1  0  0  0 
    0  1  0  0 
    3  0  1  0 
    0  3  0  1 
    0  0  3  0 
    0  0  0  3 
+0

Nifty。我不知道'convmtx'函數。 – MrAzzaman 2014-09-24 22:35:45

+0

@MrAzzaman謝謝!其實我從前一天的Q&A記得那個功能:-) – 2014-09-24 22:36:41

+0

是的,謝謝! – bdhvevhvonof 2014-09-24 22:54:02

1

您可以通過使用索引和bsxfun的組合,以稍微棘手的方式做到這一點。首先,我們要創建一個索引矩陣來表示我們正在嘗試的轉變。它應該是這樣的(至少A):

1 2 3 4 ... k 
k 1 2 3 ... k-1 
etc 

要創建此,我們可以使用bsxfun如下:

index = mod(bsxfun(@plus,1:k,-(1:(k-2))'),k)+1; 

然後我們就可以使用此作爲索引創建的矩陣A矩陣a

A = a(index); 

矩陣B是一樣的,只是調換:

B = b(index)'; 
+0

我有自定義的行/列。不增量。 – bdhvevhvonof 2014-09-24 22:31:42

+0

你是什麼意思?你有沒有試過這個代碼來看看它是否有效? – MrAzzaman 2014-09-24 22:33:00

+0

'a = [1 0 3]; k = 10;指數= mod(bsxfun(@ plus,1:k, - (1:k)'),k)+1; A = a(index);' ???索引超過矩陣尺寸。 – bdhvevhvonof 2014-09-24 22:35:15