MATLAB是否有矩阵直和函数?若无该如何快速实现?
MATLAB中矩阵直和的实现方法
MATLAB没有专门用于计算矩阵直和的内置函数,但可以通过几种简洁高效的方式实现这个运算。
先看你的示例矩阵:
A = [1 2 3 3 4 5]; B = [5 6 7 8 9 8];
我们需要得到的直和结果为:
directSum(A,B) = [1 2 3 0 0 3 4 5 0 0 0 0 0 5 6 0 0 0 7 8 0 0 0 9 8];
下面是几种快速实现的方法:
方法1:自定义分块拼接函数
这是最直观的实现方式,通过构造全零矩阵,再将A、B分别填入对角区域:
function C = directSum(A,B) [m1,n1] = size(A); [m2,n2] = size(B); C = zeros(m1+m2, n1+n2); C(1:m1, 1:n1) = A; C(m1+1:end, n1+1:end) = B; end
调用directSum(A,B)就能得到目标矩阵,逻辑清晰,容易理解。
方法2:使用内置blkdiag函数
MATLAB的blkdiag函数本身就是用来构造对角分块矩阵的,完全匹配矩阵直和的定义,这是最简洁的实现方式:
C = blkdiag(A,B);
如果需要对多个矩阵求直和,直接传入所有参数即可,比如blkdiag(A,B,C)就能得到A⊕B⊕C的结果。
方法3:利用克罗内克积(Kronecker Product)
借助克罗内克积的数学性质,也能实现直和运算,适合用来理解两者的关系:
C = kron(A, eye(size(B,1), size(B,2))) + kron(eye(size(A,1), size(A,2)), B);
不过这种方法的计算效率不如前两种,实际场景中优先选择前两种方案。
内容的提问来源于stack exchange,提问作者IzzetTechPriest
相关产品推荐
相关产品推荐

