矩陣乘法

數學中，矩陣乘法（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}$$

以上是用矩陣單元的代數系統來說明這類乘法的抽象性質。本節以下各種運算法都是這個公式的不同角度理解，運算結果相等：

### 由定義直接計算

左邊的圖表示出要如何計算$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）