MATLAB:创建具有相同的重复块中的块对角矩阵(MATLAB: Create a block di

2019-09-01 23:16发布

我有维度的矩阵K n×n个 。 我想创建的尺寸N×N的一个块对角矩阵M,使得它包含矩阵Kd块作为其对角。

我会直接使用M = blkdiag(K,K,K)等已被Ð较小。 不幸的是,d是非常大的,我不想手动编写与该blkdiag()函数d完全相同的参数公式。

有没有更短,更聪明的方式做到这一点?

Answer 1:

您可以使用kron了点。

M = kron(X,Y)

返回X和Y的克罗内克张量积的结果是通过利用X的元素,并且这些Y.如果X的之间的所有可能的产品形成了较大的阵列是m乘n和Y是对 - 通过-Q,则KRON(X,Y)为m * p乘n×q个。 所以你的情况是这样的会做:

M = kron(eye(L),K)

L块的#。



Answer 2:

下面应该工作:

d = 5; K =眼(3); T =细胞(1,d);

对于j = 1:dŤ{Ĵ} = K; 结束

M = blkdiag(T {:})



Answer 3:

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

你永远不应该使用eval,或进入for循环不必要的。 克朗是一个非常优雅的方式。 只是想分享这个,因为它也适用。



Answer 4:

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

它可以比使用KRON眼快。



Answer 5:

A“为”循环可能会有所帮助。 喜欢:

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


文章来源: MATLAB: Create a block diagonal matrix with same repeating block