【自定义Matlab函数】利用Kronecker积求解矩阵方程AXB=D

基本知识

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

参考资料:
百度百科——克罗内克积

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值