盒子
盒子
文章目录
  1. Linear Algebra in Python 3
  2. 1. Matrix Multiplication
    1. 1.1 Way 1 (方法一)
    2. 1.2 Way 2 (方法二)
    3. 1.3 Way 3 (方法三)
    4. 1.4 Way 4 (方法四)
    5. 1.5 Way 5 (方法五)
  3. 2. Gauss-Jordan Elimination

Linear Algebra in Python 3 — 矩阵乘法与逆矩阵

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为m×nm \times n矩阵,B为n×pn \times p矩阵,C为m×pm \times p矩阵),对于\matrix{C}中的CijC_{ij}(i表示行,j表示列),可以由下面的式子得到:

\begin{align*} C_{ij} {=} (\vec{a}_i) * (\bf{b}_j) \end{align*}

其中ai\vec{a}_i表示\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为2×22 \times 2矩阵,B 为$ 2 \times 2$矩阵,C为2×22 \times 2矩阵)

\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为2×22 \times 2矩阵,B 为$ 2 \times 2$矩阵,C为2×22 \times 2矩阵)

\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为2×22 \times 2矩阵,B 为$ 2 \times 2$矩阵,C为2×22 \times 2矩阵)

\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 (方法五)

思路: 分块乘法

屏幕快照 2017-09-14 13.41.03

2. Gauss-Jordan Elimination

Solves two equations at once.
对于下面式子

\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*}

如果我们想要求出a,b,c,da, b, c, d的值,需要列出下面的方程

\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*}

我们可以列出两对方程组,然后可以分别解出a,b,c,da, b, c, d的值。但是Jordan对Gauss说,我们可以一次解出两个方程。这里又用到增广矩阵,我们的目标是将左边化为单位矩阵,这样右边就得到了\matrix{A}^{-1} 。

屏幕快照 2017-09-14 11.14.09

标红的地方表示是当前主元(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。

支持一下
扫一扫,支持forsigner