我有 n x n 维度矩阵 K 。我想创建一个新的块对角矩阵 M 维 N x N ,这样它就包含 d 矩阵块 K < / strong>作为对角线。
如果 d 更小,我会直接使用 M = blkdiag(K,K,K)等。不幸的是, d 非常大,我不想手动为 blkdiag()函数的 d 完全相同的参数编写公式。
有没有更简洁,更智能的方法呢?
答案 0 :(得分:22)
您可以使用kron
。
M = kron(X,Y)
返回X和Y的Kronecker张量积。结果是通过在X的元素和Y的元素之间获取所有可能的乘积而形成的大数组。如果X是m-by-n而Y是p-by- q,然后kron(X,Y)是m * p-by-n * q。所以在你的情况下会这样:
M = kron(eye(L),K)
L
块数。
答案 1 :(得分:2)
以下内容应该有效:
d = 5; K =眼(3); T =细胞(1,d);
表示j = 1:d T {j} = K; 端
M = blkdiag(T {:})
答案 2 :(得分:2)
tmp = repmat({K},d,1);
M = blkdiag(tmp{:});
你永远不应该使用eval,或者不必要地进入循环。 克朗是一个非常优雅的方式。 只是想分享这个,因为它也有效。
答案 3 :(得分:0)
s = 'A,';
s = repmat(s,[1,n2]);
s = ['B=blkdiag(', s(1:end-1),');'];
eval(s);
它比使用kron-eye更快。
答案 4 :(得分:0)
“for”循环可能会有所帮助。像:
M = k;
for i=1:N/n - 1
M=blkdiag(M,k);
end