矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型,如电力系统网络模型。
定义
设A为的矩阵,B为的矩阵C为矩阵A与B的乘积,记作,其中矩阵C中的第行第列元素可以表示为:
如下所示:
注意事项
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
基本性质
乘积形式
除了上述的矩阵乘法以外,还有其他一些特殊的“乘积”形式被定义在矩阵上,值得注意的是,当提及“矩阵相乘”或者“矩阵乘法”的时候,并不是指代这些特殊的乘积形式,而是定义中所描述的矩阵乘法。在描述这些特殊乘积时,使用这些运算的专用名称和符号来避免表述歧义。
哈达马积
矩阵与矩阵的Hadamard积记作。其元素定义为两个矩阵对应元素的乘积的m×n矩阵。例如,
克罗内克积
克罗内克积是两个任意大小的矩阵间的运算,符号记作。克罗内克积也被称为直积或张量积。以德国数学家克罗内克命名。计算过程如下例所示:
实现
C++代码
struct Matrix:vector
实际应用
数据统计
某公司有四个工厂,分布在不同地区,同时三种产品,产量(单位;t),试用矩阵统计这些数据。
可用下述矩阵描述,其中四行分别表示甲乙丙丁四个工厂的生产情况,三列分布表示三种产品P1,P2,P3的产量。
再设矩阵,其中第一列表示三种产品的单件利润,第二列表示三种产品的单件体积。
矩阵C的第一列数据分别表示四个工厂的利润,第二列分别表示四个工厂产品需要的存储空间。
路径问题
给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数。
把给定的图转为邻接矩阵,即当且仅当存在一条边。令,那么,实际上就等于从点i到点j恰好经过2条边的路径数(枚举k为中转点)。类似地,的第i行第j列就表示从i到j经过3条边的路径数。同理,如果要求经过k步的路径数,我们只需要二分求出即可。
参考资料