Linear Algebra in Python 3
\matrix{A}\bf{x}{=}\bf{b}可解的充要条件是向量\bf{b}可以写为矩阵\matrix{A} 列向量的一个线性组合。
下面是这节的四个知识点:
- Elimination (消元)
- Success
- Failure
- Back-Substitution
- Elimination matrices
- Matrix multiplication
1. Matrix Multiplication
计算矩阵乘法有很多种方法,下面将介绍5中常用的方法。
1.1 Way 1 (方法一)
对于式子\matrix{A}\matrix{B}=\matrix{C} (其中A为矩阵,B为矩阵,C为矩阵),对于\matrix{C}中的(i表示行,j表示列),可以由下面的式子得到:
\begin{align*} C_{ij} {=} (\vec{a}_i) * (\bf{b}_j) \end{align*}其中表示\matrix{A}中的第i行,\bf{b}_{j}表示的是\matrix{B}中的第j列,它们之间进行点乘(dot product),这也要求矩阵\matrix{A}的行数矩阵\matrix{B}的列数相等,与如果将上面的式子展开会有
\begin{align*} C_{ij} {=} a_{i1}b_{1j} + a_{i2}b_{2j} + a_{i3}b_{3j} + \dots {=} \sum_{k=1}^{n} a_{ik}b_{kj} \end{align*}1.2 Way 2 (方法二)
思路: 用矩阵乘以列向量
对于下面这个式子$ \matrix{A}\matrix{B}=\matrix{C}$ (其中A为矩阵,B 为$ 2 \times 2$矩阵,C为矩阵)
\begin{align*} \begin{bmatrix} 1 & 3 \\ 2 & 7 \end{bmatrix} \begin{bmatrix} a & c \\ b & d \end{bmatrix} {=} \matrix{C} \end{align*}我们可以把右边的矩阵\matrix{B}看成一系列单独的列向量,然后分别与矩阵\matrix{A}相乘,然后再组合即可得到矩阵\matrix{C}。
\begin{align*} \begin{bmatrix} 1 & 3 \\ 2 & 7 \end{bmatrix} \begin{bmatrix} a \\ b \end{bmatrix} {=} \bf{c}_{1} \\ \begin{bmatrix} 1 & 3 \\ 2 & 7 \end{bmatrix} \begin{bmatrix} c \\ d \end{bmatrix} {=} \bf{c}_{2} \\ \begin{bmatrix} \bf{c}_{1} & \bf{c}_{2} \end{bmatrix} {=} \matrix{C} \end{align*}C中的每列是A矩阵中每一列的线性组合。A矩阵乘以向量,等价于A中列的线性组合,而B中的数值告诉我们是怎么样的线性组合。
1.3 Way 3 (方法三)
思路:用行向量乘以矩阵
对于下面这个式子$ \matrix{A}\matrix{B}=\matrix{C}$ (其中A为矩阵,B 为$ 2 \times 2$矩阵,C为矩阵)
\begin{align*} \begin{bmatrix} 1 & 3 \\ 2 & 7 \end{bmatrix} \begin{bmatrix} a & c \\ b & d \end{bmatrix} {=} \matrix{C} \end{align*}我们可以把左边的矩阵\matrix{A}看成一系列单独的行向量,然后分别与矩阵\matrix{B}相乘,然后再组合即可得到矩阵\matrix{C}。
\begin{align*} \begin{bmatrix} 1 & 3 \\ \end{bmatrix} \begin{bmatrix} a & c \\ b & d \end{bmatrix} {=} \vec{c}_{1} \\ \begin{bmatrix} 2 & 7 \end{bmatrix} \begin{bmatrix} a & c \\ b & d \end{bmatrix} {=} \vec{c}_{2} \\ \begin{bmatrix} \vec{c}_{1} \\ \vec{c}_{2} \end{bmatrix} {=} \matrix{C} \end{align*}C中的每行是B矩阵中每一行的线性组合。向量乘以矩阵,等价于B中行的线性组合,而A中的数值告诉我们是怎么样的线性组合。
1.4 Way 4 (方法四)
思路:用列向量乘以行向量
对于下面这个式子$ \matrix{A}\matrix{B}=\matrix{C}$ (其中A为矩阵,B 为$ 2 \times 2$矩阵,C为矩阵)
\begin{align*} \begin{bmatrix} 1 & 3 \\ 2 & 7 \end{bmatrix} \begin{bmatrix} a & c \\ b & d \end{bmatrix} {=} \matrix{C} \end{align*}我们可以把左边的矩阵\matrix{A}看成一系列单独的列向量,把矩阵\matrix{B}看成是单独的行向量,然后再组合即可得到矩阵\matrix{C}。
\begin{align*} \begin{bmatrix} 1 \\ 2 \end{bmatrix} \begin{bmatrix} a & c \\ \end{bmatrix} + \begin{bmatrix} 3 \\ 7 \end{bmatrix} \begin{bmatrix} b & d \end{bmatrix} {=} \matrix{C} \end{align*}1.5 Way 5 (方法五)
思路: 分块乘法
2. Gauss-Jordan Elimination
\begin{align*} \begin{bmatrix} 1 & 3 \\ 2 & 7 \end{bmatrix} \begin{bmatrix} a & c \\ b & d \end{bmatrix} {=} \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \end{align*}Solves two equations at once.
对于下面式子
如果我们想要求出的值,需要列出下面的方程
\begin{align*} \begin{bmatrix} 1 & 3 \\ 2 & 7 \end{bmatrix} \begin{bmatrix} a \\ b \end{bmatrix} {=} \begin{bmatrix} 1 \\ 0 \end{bmatrix} \\ \\ \begin{bmatrix} 1 & 3 \\ 2 & 7 \end{bmatrix} \begin{bmatrix} c \\ d \end{bmatrix} {=} \begin{bmatrix} 0 \\ 1 \end{bmatrix} \end{align*}我们可以列出两对方程组,然后可以分别解出的值。但是Jordan对Gauss说,我们可以一次解出两个方程。这里又用到增广矩阵,我们的目标是将左边化为单位矩阵,这样右边就得到了\matrix{A}^{-1} 。
标红的地方表示是当前主元(pivot),这样我们就将
\begin{align*} [\ \matrix{A} \matrix{I} ]\ \rightarrow [\ \matrix{I} \matrix{A}^{-1} ]\ \end{align*}也就得到了我们想要的\matrix{A}^{-1} 。
为什么这种方法会用效呢? 我们上面只是对增广矩阵进行了加减法变化,为什么会得到矩阵\matrix{A}的逆矩阵呢?上节我们说过,可以通过矩阵相乘来达到矩阵变化的目的,如下式子所表示的。我们在增广矩阵左乘矩阵\matrix{E}使得\matrix{A} \matrix{I} 变为 \matrix{I} \matrix{E} 。
\begin{align*} \matrix{E} [\ \matrix{A} \matrix{I} ]\ {=} [\ \matrix{I} \matrix{E} ]\ \end{align*}这里用到了分块矩阵乘法的思想,因为\matrix{E}\matrix{A}{=}\matrix{I},这就说明\matrix{E}{=}\matrix{A}^{-1} 。即:
\begin{align*} \matrix{E} [\ \matrix{A} \matrix{I} ]\ {=} [\ \matrix{I} \matrix{A}^{-1} ]\ \end{align*}因为相对于去寻找矩阵\matrix{E},更方便的方法是通过加减法变化来达到同样的效果。这就是Gauss-Jordan Elimination。