矩陣:數域 $F$ 上 $m*n$ 個數構成的數表。
雖然它只是一個數表,但這組數可以賦予多個不同的含義,如向量,方程系數,線性變換等,理解的角度不同,矩陣的運算便代表不同的含義。
單純來看矩陣,其實就是一種書寫手法,正是賦予了相應地運算,才能夠使其具有一定地表現力。
1. 下面介紹下矩陣定義了哪些基本運算。
1)加減運算:兩個 $m \times n$ 的矩陣 $A = (a_{ij}),B = (b_{ij})$,兩個必須為同型矩陣,它們的加法規定為
$$(A+B)_{ij} = a_{ij} + b_{ij}$$
2)數乘運算:數 $k$ 與矩陣 $A$ 的乘積,記為 $Ak$ 或者 $kA$,規則為
$$(kA)_{ij} = (Ak)_{ij} = ka_{ij}$$
3)矩陣轉置:把矩陣 $A$ 的行換成同序數的列得到的新矩陣,稱為 $A$ 的轉置矩陣,其規則為
$$A^{T} = (a_{ji})$$
4)矩陣相乘:設矩陣 $A=(a_{ij})_{ms}\;,B=(b_{ij})_{sn}$,兩個矩陣不必為同型矩陣,其乘法運算規定為
$$AB = \left ( \sum_{k=1}^{s}a_{ik}b_{kj} \right )_{m\times n}$$
以 $k$ 來遍歷,對於 $A$ 矩陣,$k$ 遍歷第 $i$ 行的每一個元素,對於 $B$ 矩陣,$k$ 遍歷第 $j$ 列的每一個元素,由於使用一個計數變量 $k$,
故相乘的兩個矩陣必須滿足前一個矩陣的列數等於后一個矩陣的行數。第 $i$ 行第 $j$ 列的內積和作為結果矩陣第 $i$ 行第 $j$ 列的值。
這樣規定矩陣的乘法后,發現它具有很多合理性:
1)滿足結合律:$ABC$ = $A(BC)$
2)滿足分配律:$A(B+C)$ = $AB+AC$
但是不滿足交換律,即 $AB \neq BA$。
是不是很神奇,下面我們對結合律做一個證明:
設矩陣 $A=(a_{ij})_{mn}\;,B=(b_{ij})_{np}\;,C=(c_{ij})_{pq}$,則
$$(ABC)_{ij} = \sum_{k=1}^{p}(AB)_{ik}C_{kj} \\
= \sum_{k=1}^{p}\left ( \sum_{l=1}^{n}A_{il}B_{lk} \right )C_{kj} \\
= \sum_{k=1}^{p}\left ( \sum_{l=1}^{n}A_{il}B_{lk}C_{kj} \right ) \\
= \sum_{l=1}^{n}\left (\sum_{k=1}^{p} A_{il}B_{lk}C_{kj} \right ) \\
= \sum_{l=1}^{n}A_{il}\left (\sum_{k=1}^{p}B_{lk}C_{kj} \right ) \\
= \sum_{l=1}^{n}A_{il}\left (BC \right )_{lj} = (A(BC))_{ij}$$
注:理解連續求和,需要從外向內解讀,相當於嵌套的 $for$ 循環。
2. 分塊矩陣
分塊矩陣是一種計算手段。將一個矩陣用若干條橫線和豎線分成許多個小矩陣,將每個小矩陣稱為這個矩陣的子塊,以子塊為元素的形式上的矩陣稱為分塊矩陣。
分塊矩陣是一種計算手段。對矩陣進行適當分塊,可使高階矩陣的運算可以轉化為低階矩陣的運算,同時也使原矩陣的結構顯得簡單而清晰,從而能夠大大簡化運算步驟。
有了分塊矩陣,意味着矩陣中的元素不一定就是數值,也可以是一個矩陣,若干個子矩陣構成一個大矩陣,宛如程序中的遞歸。
為什么可以對矩陣分塊呢?
1)加法的結合性,即分塊子向量內積的和等於不分塊向量的內積。
2)矩陣可以看作是一系列元素拼接起來的,而划分是其反操作。
下面介紹兩種典型的分塊方式,對於 $AB=C$,可以有
1)按行分塊:對 $B,C$ 按行分塊
$$\begin{bmatrix}
a_{11} & a_{12} & ... & a_{1n} \\
a_{21} & a_{22} & ... & a_{2n} \\
... & ... & ... & ... \\
a_{n1} & a_{n2} & ... & a_{nn}
\end{bmatrix} \cdot
\begin{bmatrix}
\beta_{1}\\
\beta_{2}\\
...\\
\beta_{n}
\end{bmatrix} =
\begin{bmatrix}
\alpha_{1}\\
\alpha_{2}\\
...\\
\alpha_{n}
\end{bmatrix}$$
可見矩陣 $C$ 的行向量可由 $B$ 的行向量線性表出。
2)按列分塊:對 $A,C$ 按列分塊
$$\begin{bmatrix}
\alpha_{1} & \alpha_{2} & ... & \alpha_{n}
\end{bmatrix} \cdot
\begin{bmatrix}
b_{11} & b_{12} & ... & b_{1n} \\
b_{21} & b_{22} & ... & b_{2n} \\
... & ... & ... & ... \\
b_{n1} & b_{n2} & ... & b_{nn}
\end{bmatrix} =
\begin{bmatrix}
\beta_{1} & \beta_{2} & ... & \beta_{n}
\end{bmatrix}$$
可見矩陣 $C$ 的列向量可由 $A$ 的列向量線性表出
上述分塊方法提供了一種矩陣相乘的計算方式,以按行分塊為例。
我們可以不必一個一個元素地計算,而可以直接得到新矩陣的一整行元素,如
$$\alpha_{1} = a_{11}\beta_{1} + a_{12}\beta_{2} + ... + a_{1n}\beta_{n}$$
即用 $a_{11}$ 乘上矩陣 $B$ 的第 $1$ 行元素,$a_{12}$ 乘上矩陣 $B$ 的第 $2$ 行元素,$a_{1n}$ 乘上矩陣 $B$ 的第 $n$ 行元素,然后累加,就可以得到新矩陣的第一行元素。
對於矩陣相乘 $AB=C$,我們可以這樣理解:
1)矩陣 $C$ 的每一個行向量是矩陣 $B$ 的行向量的線性組合,組合的系數是矩陣 $A$ 的每一行。
2)矩陣 $C$ 的每一個列向量是矩陣 $A$ 的列向量的線性組合,組合的系數是矩陣 $B$ 的每一列。