矩阵乘法

数学中，矩阵乘法（matrix multiplication）是一种根据两个矩阵得到第三个矩阵的二元运算，第三个矩阵即前两者的乘积，称为矩阵积（matrix product）。设$A$是$n\times m$的矩阵，$B$是$m\times p$的矩阵，则它们的矩阵积$AB$是$n\times p$的矩阵。$A$中每一行的$m$个元素都与$B$中对应列的$m$个元素对应相乘，这些乘积的和就是$AB$中的一个元素。

矩阵可以用来表示线性映射，矩阵积则可以用来表示线性映射的复合。因此，矩阵乘法是线性代数的基础工具，不仅在数学中有大量应用，在应用数学、物理学、工程学等领域也有广泛使用。

## 一般矩阵乘积

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数（column）和第二个矩阵的行数（row）相同时才有定义。一般单指矩阵乘积时，指的便是一般矩阵乘积。若$A$为$m\times n$矩阵，$B$为$n\times p$矩阵，则他们的乘积$AB$(有时记做$A\cdot B$）会是一个$m\times p$矩阵。其乘积矩阵的元素如下面式子得出：

$$(AB)_{ij} = \sum_{r=1}^n a_{ir}b_{rj} = a_{i1}b_{1j} + a_{i2}b_{2j} + \cdots + a_{in}b_{nj}$$

以上是用矩阵单元的代数系统来说明这类乘法的抽象性质。本节以下各种运算法都是这个公式的不同角度理解，运算结果相等：

### 由定义直接计算

<image>

左边的图表示出要如何计算$AB$的$(1,2)$和$(3,3)$元素，当$A$是个$4\times 2$矩阵和B是个$2\times 3$矩阵时。分别来自两个矩阵的元素都依箭头方向而两两配对，把每一对中的两个元素相乘，再把这些乘积加总起来，最后得到的值即为箭头相交位置的值。

$$(AB)_{1,2} = \sum_{r=1}^2 a_{1,r}b_{r,2} = a_{1,1}b_{1,2}+a_{1,2}b_{2,2}$$

$$(AB)_{3,3} = \sum_{r=1}^2 a_{3,r}b_{r,3} = a_{3,1}b_{1,3}+a_{3,2}b_{2,3}$$

### 向量方法

这种矩阵乘积亦可由稍微不同的观点来思考：把向量和各系数相乘后相加起来。设$\mathbf{A}$和$\mathbf{B}$是两个给定如下的矩阵：

$\mathbf{A} = \begin{bmatrix} <pre> a_{1,1} & a_{1,2} & \dots \\ a_{2,1} & a_{2,2} & \dots \\ \vdots & \vdots & \ddots </pre> \end{bmatrix} = \begin{bmatrix} <pre> A_1 & A_2 & \dots </pre> \end{bmatrix},$ $\mathbf{B} = \begin{bmatrix} <pre> b_{1,1} & b_{1,2} & \dots \\ b_{2,1} & b_{2,2} & \dots \\ \vdots & \vdots & \ddots </pre> \end{bmatrix} = \begin{bmatrix} <pre> B_1\\ B_2\\ \vdots </pre> \end{bmatrix}$

其中

$A_1$是由所有$a_{x,1}$元素所组成的向量(column)，$A_2$是由所有$a_{x,2}$元素所组成的向量，以此类推。

$B_1$是由所有$b_{1,x}$元素所组成的向量(row)，$B_2$是由所有$b_{2,x}$元素所组成的向量，以此类推。

则

$$\mathbf{AB} = \begin{bmatrix} <pre> a_{1,1} \begin{bmatrix} b_{1,1} & b_{1,2} & \dots \end{bmatrix} + a_{1,2} \begin{bmatrix} b_{2,1} & b_{2,2} & \dots \end{bmatrix} + \cdots \\\\ a_{2,1} \begin{bmatrix} b_{1,1} & b_{1,2} & \dots \end{bmatrix} + a_{2,2} \begin{bmatrix} b_{2,1} & b_{2,2} & \dots \end{bmatrix} + \cdots \\ \vdots </pre> \end{bmatrix} = A_1 B_1 + A_2 B_2 +\dots$$

举个例子来说：

$$<pre> \begin{bmatrix} 1 & 0 & 2 \\ -1 & 3 & 1 \end{bmatrix} </pre> \cdot <pre> \begin{bmatrix} 3 & 1 \\ 2 & 1 \\ 1 & 0 \end{bmatrix} </pre> = \begin{bmatrix} <pre> 1 \begin{bmatrix} 3 & 1 \end{bmatrix} + 0 \begin{bmatrix} 2 & 1 \end{bmatrix} + 2 \begin{bmatrix} 1 & 0 \end{bmatrix} \\ -1 \begin{bmatrix} 3 & 1 \end{bmatrix} + 3 \begin{bmatrix} 2 & 1 \end{bmatrix} + 1 \begin{bmatrix} 1 & 0 \end{bmatrix} </pre> \end{bmatrix} = \begin{bmatrix} <pre> \begin{bmatrix} 3 & 1 \end{bmatrix} + \begin{bmatrix} 0 & 0 \end{bmatrix} + \begin{bmatrix} 2 & 0 \end{bmatrix} \\ \begin{bmatrix} -3 & -1 \end{bmatrix} + \begin{bmatrix} 6 & 3 \end{bmatrix} + \begin{bmatrix} 1 & 0 \end{bmatrix} </pre> \end{bmatrix}$$

$$= \begin{bmatrix} <pre> 5 & 1 \\ 4 & 2 </pre> \end{bmatrix}$$

左面矩阵的列为为系数表，右边矩阵为向量表。例如，第一行是1 0 2，因此将1乘上第一个向量，0乘上第二个向量，2则乘上第三个向量。

### 向量表方法

一般矩阵乘积也可以想为是行向量和列向量的内积。若$\mathbf{A}$和$\mathbf{B}$为给定如下的矩阵：

$\mathbf{A} = \begin{bmatrix} <pre> a_{1,1} & a_{1,2} & a_{1,3} & \dots \\ a_{2,1} & a_{2,2} & a_{2,3} & \dots \\ a_{3,1} & a_{3,2} & a_{3,3} & \dots \\ \vdots & \vdots & \vdots & \ddots </pre> \end{bmatrix} = \begin{bmatrix} <pre> A_1 \\ A_2 \\ A_3 \\ \vdots </pre> \end{bmatrix}$且$\mathbf{B} = \begin{bmatrix} <pre> b_{1,1} & b_{1,2} & b_{1,3} & \dots \\ b_{2,1} & b_{2,2} & b_{2,3} & \dots \\ b_{3,1} & b_{3,2} & b_{3,3} & \dots \\ \vdots & \vdots & \vdots & \ddots </pre> \end{bmatrix} = \begin{bmatrix} B_1 & B_2 & B_3 & \dots \end{bmatrix}$

其中，这里

$A_1$是由所有$a_{1,x}$元素所组成的向量，$A_2$是由所有$a_{2,x}$元素所组成的向量，以此类推。

$B_1$是由所有$b_{x,1}$元素所组成的向量，$B_2$是由所有$b_{x,2}$元素所组成的向量，以此类推。

则

$$\mathbf{AB} = \begin{bmatrix} <pre> A_1 \\ A_2 \\ A_3 \\ \vdots </pre> \end{bmatrix} \times \begin{bmatrix} B_1 & B_2 & B_3 & \dots \end{bmatrix} = \begin{bmatrix} (A_1 \cdot B_1) & (A_1 \cdot B_2) & (A_1 \cdot B_3) & \dots \\ (A_2 \cdot B_1) & (A_2 \cdot B_2) & (A_2 \cdot B_3) & \dots \\ (A_3 \cdot B_1) & (A_3 \cdot B_2) & (A_3 \cdot B_3) & \dots \\ \vdots & \vdots & \vdots & \ddots \end{bmatrix}$$

即

$$\left(\mathbf{AB} \right)_{ij}=A_iB_j$$

### 性质

矩阵乘法是不可交换的（即$AB\neq BA$），除了一些较特别的情况。很清楚可以知道，不可能预期说在改变向量的部分后还能得到相同的结果，而且第一个矩阵的列数必须要和第二个矩阵的行数相同，也可以看出为什么矩阵相乘的顺序会影响其结果。

虽然矩阵乘法是不可交换的，但$AB$和$BA$的行列式总会是一样的（当$A$、$B$是同样大小的方阵时）。

当$A$、$B$可以被解释为线性算子，其矩阵乘积$AB$会对应为两个线性算子的复合函数，其中B先作用。

### 在试算表中做矩阵乘法

$$<pre> \begin{bmatrix} 1 & 0 & 2 \\ -1 & 3 & 1 \end{bmatrix} </pre> \cdot <pre> \begin{bmatrix} 3 & 1 \\ 2 & 1 \\ 1 & 0 \end{bmatrix} </pre> = \begin{bmatrix} <pre> 5 & 1 \\ 4 & 2 </pre> \end{bmatrix}$$

以 Google Sheet 为例，选取储存格范围或者使用阵列，在储存格输入

```vbscript
=MMULT({1,0,2;-1,3,1},{3,1;2,1;1,0})
```

在某些试算表软件中必须必须按Ctrl 将储存格内的变数转换为阵列

## 纯量乘积

矩阵$A=(a_{ij})$和纯量$r$的纯量乘积$rA$的矩阵大小和$A$一样，$rA$的各元素定义如下：

$$(rA)_{ij} = r \cdot a_{ij} \ $$

若我们考虑于一个环的矩阵时，上述的乘积有时会称做左乘积，而右乘积的则定义为

$$(Ar)_{ij} = a_{ij} \cdot r \ $$

当环是可交换时，例如实数体或复数体，这两个乘积是相同的。但无论如何，若环是不可交换的话，如四元数，他们可能会是不同的。例如。

$$<pre> i\begin{bmatrix} i & 0 \\ 0 & j \\ \end{bmatrix} </pre> = \begin{bmatrix} <pre> -1 & 0 \\ 0 & k \\ \end{bmatrix} </pre> \ne \begin{bmatrix} <pre> -1 & 0 \\ 0 & -k \\ \end{bmatrix} </pre> = \begin{bmatrix} <pre> i & 0 \\ 0 & j \\ \end{bmatrix}i </pre>$$

## 阿达马乘积

给定两个相同维度的矩阵可计算有阿达马乘积（Hadamard product），或称做逐项乘积、分素乘积（element-wise product, entrywise product）。两个$m\times n$矩阵$A$、$B$的阿达马乘积标记为$A \circ B$，定义为$(A \circ B)_{ij} = a_{ij}b_{ij}$的$m\times n$矩阵。例如。

$$<pre> \begin{bmatrix} 1 & 3 & 2 \\ 1 & 0 & 0 \\ 1 & 2 & 2 \end{bmatrix} </pre> \circ <pre> \begin{bmatrix} 0 & 0 & 2 \\ 7 & 5 & 0 \\ 2 & 1 & 1 \end{bmatrix} </pre> = <pre> \begin{bmatrix} 1 \cdot 0 & 3 \cdot 0 & 2 \cdot 2 \\ 1 \cdot 7 & 0 \cdot 5 & 0 \cdot 0 \\ 1 \cdot 2 & 2 \cdot 1 & 2 \cdot 1 \end{bmatrix} </pre> = <pre> \begin{bmatrix} 0 & 0 & 4 \\ 7 & 0 & 0 \\ 2 & 2 & 2 \end{bmatrix} </pre>$$

需注意的是，阿达马乘积是克罗内克乘积的子矩阵。

## 克罗内克乘积

给定任两个矩阵$A$和$B$，可以得到两个矩阵的直积，或称为克罗内克乘积$A\otimes B$，其定义如下

$$<pre> \begin{bmatrix} a_{11}B & a_{12}B & \cdots & a_{1n}B \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1}B & a_{m2}B & \cdots & a_{mn}B \end{bmatrix} </pre>$$

当$A$是一$m\times n$矩阵和$B$是一$p\times r$矩阵时，$A\otimes B$会是一$mp\times nr$矩阵，而且此一乘积也是不可交换的。

举个例子。

$$<pre> \begin{bmatrix} 1 & 2 \\ 3 & 1 \\ \end{bmatrix} </pre> \otimes <pre> \begin{bmatrix} 0 & 3 \\ 2 & 1 \\ \end{bmatrix} </pre> = <pre> \begin{bmatrix} 1\cdot 0 & 1\cdot 3 & 2\cdot 0 & 2\cdot 3 \\ 1\cdot 2 & 1\cdot 1 & 2\cdot 2 & 2\cdot 1 \\ 3\cdot 0 & 3\cdot 3 & 1\cdot 0 & 1\cdot 3 \\ 3\cdot 2 & 3\cdot 1 & 1\cdot 2 & 1\cdot 1 \\ \end{bmatrix} </pre> = <pre> \begin{bmatrix} 0 & 3 & 0 & 6 \\ 2 & 1 & 4 & 2 \\ 0 & 9 & 0 & 3 \\ 6 & 3 & 2 & 1 \end{bmatrix} </pre>$$

若$A$和$B$分别表示两个线性算子$V_1\to W_1$和$V_2\to W_2$，$A\otimes B$便为其映射的张量乘积，$V_1\otimes V_2\to W_1\otimes W_2$

## 共同性质

上述三种乘积都符合结合律：

$$A(BC) = (AB)C$$

以及分配律：

$$A(B + C) = AB + AC$$

$$(A + B)C = AC + BC$$

而且和纯量乘积相容：

$$c(AB) = (cA)B$$

$$(Ac)B = A(cB)$$

$$(AB)c = A(Bc)$$

注意上述三个分开的表示式只有在纯量体的乘法及加法是可交换（即纯量体为一可交换环）时会相同。

## 外部链接

- WIMS Online Matrix Multiplier
- Animated Matrix Multiplication Examples (purplemath)
- Matrix Multipication in Javascript （works in Firefox）