我有维度的矩阵K n×n个 。 我想创建的尺寸N×N的一个块对角矩阵M,使得它包含矩阵K的d块作为其对角。
我会直接使用M = blkdiag(K,K,K)等已被Ð较小。 不幸的是,d是非常大的,我不想手动编写与该blkdiag()函数d完全相同的参数公式。
有没有更短,更聪明的方式做到这一点?
我有维度的矩阵K n×n个 。 我想创建的尺寸N×N的一个块对角矩阵M,使得它包含矩阵K的d块作为其对角。
我会直接使用M = blkdiag(K,K,K)等已被Ð较小。 不幸的是,d是非常大的,我不想手动编写与该blkdiag()函数d完全相同的参数公式。
有没有更短,更聪明的方式做到这一点?
您可以使用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
块的#。
下面应该工作:
d = 5; K =眼(3); T =细胞(1,d);
对于j = 1:dŤ{Ĵ} = K; 结束
M = blkdiag(T {:})
tmp = repmat({K},d,1);
M = blkdiag(tmp{:});
你永远不应该使用eval,或进入for循环不必要的。 克朗是一个非常优雅的方式。 只是想分享这个,因为它也适用。
s = 'A,';
s = repmat(s,[1,n2]);
s = ['B=blkdiag(', s(1:end-1),');'];
eval(s);
它可以比使用KRON眼快。
A“为”循环可能会有所帮助。 喜欢:
M = k;
for i=1:N/n - 1
M=blkdiag(M,k);
end