2013-05-04 162 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