我有一个矩阵K的尺寸n x n。我想创建一个新的块对角矩阵的尺寸N×N的,使得它包含d矩阵ķ作为其对角的块中号。MATLAB:创建一个具有相同重复块的块对角矩阵
我会直接使用M = blkdiag(K,K,K)等有d过小。不幸的是,d是非常大的,我不想手动编写公式与d为blkdiag()函数完全相同的参数。
有没有更短,更聪明的方法来做到这一点?
我有一个矩阵K的尺寸n x n。我想创建一个新的块对角矩阵的尺寸N×N的,使得它包含d矩阵ķ作为其对角的块中号。MATLAB:创建一个具有相同重复块的块对角矩阵
我会直接使用M = blkdiag(K,K,K)等有d过小。不幸的是,d是非常大的,我不想手动编写公式与d为blkdiag()函数完全相同的参数。
有没有更短,更聪明的方法来做到这一点?
您可以使用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
块#。
以下应该工作:
d = 5; K =眼(3); T =小区(1,d);
对于j = 1:d T {j} = K; 端
M = blkdiag(T {:})
s = 'A,';
s = repmat(s,[1,n2]);
s = ['B=blkdiag(', s(1:end-1),');'];
eval(s);
它可以比使用KRON眼更快。
非常注意!!!!!!!!! – 2016-08-16 04:26:17
tmp = repmat({K},d,1);
M = blkdiag(tmp{:});
你不应该使用eval或者不必要地进入循环。 克朗是一个非常优雅的方式。 只是想分享这个,因为它也可以。
“for”循环可能会有帮助。喜欢:
M = k;
for i=1:N/n - 1
M=blkdiag(M,k);
end
感谢提示@natan。我尝试了几种组合,并认为以下给出了我正在寻找的东西 - 'M = kron(eye(d),K)' – steadyfish 2013-05-04 04:14:52