我有一個矩陣K的尺寸n x n。我想創建一個新的塊對角矩陣的尺寸N×N的,使得它包含d矩陣ķ作爲其對角的塊中號。MATLAB:創建一個具有相同重複塊的塊對角矩陣
我會直接使用M = blkdiag(K,K,K)等有d過小。不幸的是,d是非常大的,我不想手動編寫公式與d爲blkdiag()函數完全相同的參數。
有沒有更短,更聰明的方法來做到這一點?
我有一個矩陣K的尺寸n x n。我想創建一個新的塊對角矩陣的尺寸N×N的,使得它包含d矩陣ķ作爲其對角的塊中號。MATLAB:創建一個具有相同重複塊的塊對角矩陣
我會直接使用M = blkdiag(K,K,K)等有d過小。不幸的是,d是非常大的,我不想手動編寫公式與d爲blkdiag()函數完全相同的參數。
有沒有更短,更聰明的方法來做到這一點?
您可以使用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
塊#。
以下應該工作:
d = 5; K =眼(3); T =小區(1,d);
對於j = 1:d T {j} = K; 端
M = blkdiag(T {:})
s = 'A,';
s = repmat(s,[1,n2]);
s = ['B=blkdiag(', s(1:end-1),');'];
eval(s);
它可以比使用KRON眼更快。
非常注意!!!!!!!!! – 2016-08-16 04:26:17
tmp = repmat({K},d,1);
M = blkdiag(tmp{:});
你不應該使用eval或者不必要地進入循環。 克朗是一個非常優雅的方式。 只是想分享這個,因爲它也可以。
「for」循環可能會有幫助。喜歡:
M = k;
for i=1:N/n - 1
M=blkdiag(M,k);
end
感謝提示@natan。我嘗試了幾種組合,並認爲以下給出了我正在尋找的東西 - 'M = kron(eye(d),K)' – steadyfish 2013-05-04 04:14:52