MATLAB:创建一个具有相同重复块的块对角矩阵

16

我有一个尺寸为 n x n 的矩阵K。 我想创建一个新的块对角线矩阵,其尺寸为 N x N,它包含 d 个矩阵K块作为其对角线。

如果d较小,我可以直接使用 M = blkdiag(K,K,K)等方式。不幸的是,d非常大,我不想手动编写具有确切相同参数的 blkdiag()函数公式。

有没有更简短、更智能的方法来实现这个?

5个回答

26

你可以使用 kron 来实现。

M = kron(X,Y)
返回结果为:

返回X和Y的克罗内克张量积。该结果是一个由取X和Y元素之间所有可能的乘积形成的大数组。如果X是m-by-n矩阵,Y是p-by-q矩阵,那么kron(X,Y)就是m*p-by-n*q矩阵。因此,在你的情况下,可以这样做:

M = kron(eye(L),K)

L 表示块的数量。


感谢 @natan 的提示。我尝试了几种组合,发现以下代码可以实现我想要的效果 - M = kron(eye(d),K) - steadyfish

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

您不应该使用eval,或者不必要地进入for循环。Kron是一种非常优雅的方法。只想分享这个,因为它也可以工作。


实际上,这比使用 Kron 更快:K=rand(3); tic;G = kron(eye(2000),K);toc经过的时间为 0.122015 秒。tic;tmp = repmat({K},2000,1);M = blkdiag(tmp{:});toc经过的时间为 0.036623 秒。 - Youwei Liang

2
以下内容应该可以工作:

d = 5; K = eye(3); T = cell(1, d);

for j = 1:d     T {j} = K; end

M = blkdiag (T {:})


0
一个“for”循环可能会有帮助。像这样:
M = k;
for i=1:N/n - 1
    M=blkdiag(M,k);
end

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

使用 kron-eye 可能比其他方法更快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接