基本知识
Kronecker积定义
如果A是一个m×n的矩阵,B是一个p×q的矩阵,A与B的Kronecker积为一个mp×nq的分块矩阵:
具体为:
Kronecker积与矩阵方程
首先需要知道矩阵拉直运算/矩阵向量化处理概念:矩阵按行或列的顺序组成一个长向量(即下文中vec()).
基于Kronecker积的定义,我们可以得出如下性质:
基于此,对于矩阵方程AXB=D的求解等价于通过求解:
得到vec(X)
进而通过逆拉直运算求得X
Matlab代码实现
Matlab自带函数
Matlab自带kron()函数来计算Kronecker积
格式:C = kron(A,B)
自定义函数
函数定义:
function X = SloveEquationKron(A,B,D)
[m,p]=size(A);
[q,n]=size(B);
[m,n]=size(D);
B=B';
C=[]; % 创建空矩阵C
for row=1:n
M=[]; % 辅助矩阵M
for col=1:q
M=[M,B(row,col)*A];
end
C=[C;M]; % 矩阵拼接实现Kronecker积
end
XX=C\D(:); % inv(C)*vec(D) C=B'与A的kron积
X=reshape(XX,[p,q]);
end
测试程序:
m=10; p=5; q=6; n=8;
A = rand(m,p);
X = zeros(p,q);
B = rand(q,n);
D = rand(m,n);
X = SloveEquationKron(A,B,D);
norm(kron(B',A)\D(:)-X(:),'fro') %正确输出0
参考资料:
百度百科——克罗内克积