2013-05-04 78 views
14

我有一個矩陣K的尺寸n x n。我想創建一個新的塊對角矩陣的尺寸N×N的,使得它包含d矩陣ķ作爲其對角的中號MATLAB:創建一個具有相同重複塊的塊對角矩陣

我會直接使用M = blkdiag(K,K,K)等d過小。不幸的是,d是非常大的,我不想手動編寫公式與dblkdiag()函數完全相同的參數。

有沒有更短,更聰明的方法來做到這一點?

回答

21

您可以使用kron

M = kron(X,Y) 

返回X和Y的克羅內克張量積的結果是通過利用X的元素,並且這些Y.如果X的之間的所有可能的產品形成了較大的陣列是m乘n和Y是p-by-q,則kron(X,Y)是m * p-by-n * q。所以你的情況是這樣的會做:

M = kron(eye(L),K) 

L塊#。

+0

感謝提示@natan。我嘗試了幾種組合,並認爲以下給出了我正在尋找的東西 - 'M = kron(eye(d),K)' – steadyfish 2013-05-04 04:14:52

2

以下應該工作:

d = 5; K =眼(3); T =小區(1,d);

對於j = 1:d T {j} = K; 端

M = blkdiag(T {:})

0
s = 'A,'; 
s = repmat(s,[1,n2]); 
s = ['B=blkdiag(', s(1:end-1),');']; 
eval(s); 

它可以比使用KRON眼更快。

+0

非常注意!!!!!!!!! – 2016-08-16 04:26:17

1
tmp = repmat({K},d,1); 
M = blkdiag(tmp{:}); 

你不應該使用eval或者不必要地進入循環。 克朗是一個非常優雅的方式。 只是想分享這個,因爲它也可以。

0

「for」循環可能會有幫助。喜歡:

M = k; 
for i=1:N/n - 1 
    M=blkdiag(M,k); 
end