矩阵向量相乘的意义

这部分和 LU 分解没有多大关系,但是 GS 的书里一直强调这种理解,想必是极有用的。

当矩阵左乘一个列向量,其结果等同于矩阵每一列以列向量为权的线性组合,例如 \[ \begin{pmatrix} 1&2&3\\ 4&5&6\\ 7&8&9\\ \end{pmatrix} \begin{pmatrix} 1\\ 2\\ 3 \end{pmatrix} = 1\begin{pmatrix} 1\\4\\7 \end{pmatrix} +2\begin{pmatrix} 2\\5\\8 \end{pmatrix} +3\begin{pmatrix} 3\\6\\9 \end{pmatrix} \] 类似地,当矩阵右乘一个行向量,其结果等于矩阵每一行以行向量为权的线性组合,例如 \[ \begin{pmatrix} 1&2&3 \end{pmatrix} \begin{pmatrix} 1&2&3\\ 4&5&6\\ 7&8&9\\ \end{pmatrix} =\begin{matrix} 1\begin{pmatrix} 1&2&3 \end{pmatrix}\\ +\\ 2\begin{pmatrix} 4&5&6 \end{pmatrix}\\+\\ 3\begin{pmatrix} 7&8&9 \end{pmatrix} \end{matrix} \] 多列,多行的情况也可以以此类推。

初等行变换的矩阵表示

注意到初等行变换可以使用矩阵进行表示,例如在一个 \(3\times 3\) 的矩阵当中把第 \(1\) 行的 \(3\) 倍加到第二行就可以表示为: \[ \begin{pmatrix} 1&0&0 \\ 3&1&0 \\ 0&0&1 \end{pmatrix} \begin{pmatrix} 1&2&3 \\ 4&5&6 \\ 7&8&9 \end{pmatrix} =\begin{pmatrix} 1&2&3 \\ 7&11&15 \\ 7&8&9 \end{pmatrix} \] 注意行变换的矩阵是左乘的,右乘就是列变换了!

具体来说,如果你把第 \(i\) 行的 \(k\) 倍加到第 \(j\) 行上,那么这个变换对应的矩阵就是在以单位矩阵为基础上 \(a_{j,i}=k\)

初等行变换的矩阵常用符号 \(E\) 表示。

由于初等行变换的意义,很容易就可以看出其逆矩阵就是把对应的元素取反,加上的我们就减回去: \[ E=\begin{pmatrix} 1&0&0 \\ 3&1&0 \\ 0&0&1 \end{pmatrix}\Rightarrow E^{-1}=\begin{pmatrix} 1&0&0 \\ -3&1&0 \\ 0&0&1 \end{pmatrix} \]

矩阵的 LU 分解

在学习初等行变换的矩阵表示之后再回头考虑我们对着 \(n\times n\) 矩阵 \(A\) 做消元得到上三角阵 \(U\) 的过程,我们就会发现,在消元过程不涉及交换两行的时候,消元过程可以表示为: \[ E_{n,n-1}\cdots E_{31}E_{21}A=U \] 其中 \(E_{21}\) 表示我们把 \(a_{21}\) 消为 \(0\) 所运用的行变换。

注意到在消元的时候我们是按照 \(E_{21}, E_{31},\cdots\) 这个顺序消过来的,但是因为行变换是左乘,因此上式当中从左到右序号是反的。

如果 \(A\) 确实可以顺顺利利地消成 \(U\),那说明 \(E_{n,n-1}\cdots E_{31}E_{21}\) 是可逆的,即: \[ \begin{aligned} A&=(E_{n,n-1}\cdots E_{31}E_{21})^{-1}U\\ &=E_{21}^{-1}E_{31}^{-1}\cdots E_{n,n-1}^{-1}U \end{aligned} \] 不妨令 \(L=E_{21}^{-1}E_{31}^{-1}\cdots E_{n,n-1}^{-1}\),则矩阵 \(A\) 可以写作: \[ A=LU \] 这就被称为矩阵 \(A\)\(LU\) 分解。

其中 \(U\) 是上三角阵无疑,而 \(L\),其字母暗示我们这是一个下三角阵

不仅如此,比如说对于 \(3\) 阶方阵消元共三步: \[ E_{21}^{-1} = \begin{pmatrix} 1&0&0\\ a&1&0\\ 0&0&1 \end{pmatrix} , E_{31}^{-1} = \begin{pmatrix} 1&0&0\\ 0&1&0\\ b&0&1 \end{pmatrix} , E_{32}^{-1} = \begin{pmatrix} 1&0&0\\ 0&1&0\\ 0&c&1 \end{pmatrix} \] 计算 \(L\) 可得 \[ L=\begin{pmatrix} 1&0&0\\ a&1&0\\ 0&0&1 \end{pmatrix}\begin{pmatrix} 1&0&0\\ 0&1&0\\ b&0&1 \end{pmatrix}\begin{pmatrix} 1&0&0\\ 0&1&0\\ 0&c&1 \end{pmatrix}=\begin{pmatrix} 1&0&0\\ a&1&0\\ b&c&1 \end{pmatrix} \] \(L\) 在形式上就是把所有行变换矩阵 “拼起来 “!矩阵乘法平常都会把矩阵里面的数字形式破坏掉,这次为什么那么奇妙呢?

从消元的角度,可以这么理解:

我们能够把两个行变换矩阵 “拼” 起来,当且仅当一个变换的结果不会改变另一个变换的源。

什么意思?如果 \(E_1\) 把第 \(2\) 行的 \(3\) 倍加到第 \(2\) 行,\(E_2\) 把第 \(1\) 行的 \(2\) 倍加到第 \(2\) 行。

如果我们先做 \(E_1\) 再做 \(E_2\)\(E_2E_1\),那么这个时候我们是可以直接拼起来的。因为先做的 \(E_1\) 没有改变 \(E_2\) 所依赖的第 \(2\) 行。但是先做 \(E_2\) 再做 \(E_1\)\(E_1E_2\) 就不能直接拼起来,因为先做的 \(E_2\)\(E_1\) 所依赖的第 \(2\) 行改掉了。

然后我们发现在 \(LU\) 分解里面我们是先改第 \(n\) 行,再改第 \(n-1\) 行这样从下到上地变换上去的。改变第 \(n\) 行的变换只会依赖于前 \(n-1\) 行,因此出不了问题。

从纯计算的角度,可以这么解释:

考虑矩阵乘法 \(L=EL'\),其中 \(E\) 是一个行变换矩阵且假设其中 \(E_{ik}=a\)\(L'\) 是下三角阵。

则考虑 \(L\)\(i\) 行第 \(j\) 列的值 \(L_{ij}\)(除了第 \(i\) 行,结果的其他行显然等于 \(L'\)),必然是 \(E\) 的行向量与 \(L'\) 列向量之点乘: \[ L_{ij}=\begin{pmatrix} 0 \\ \vdots \\ a\\ \vdots \\ \color{red}1\\ \vdots\\ 0 \end{pmatrix} \cdot \begin{pmatrix} 0 \\ \vdots \\ \color{blue}1 \\ \vdots \\ b \\ c \\ \vdots \\ \end{pmatrix} \]

由于三角阵主对角线上都是 \(1\),在上式中左边向量里面的 \(\color{red}1\) 就是从上往下数第 \(i\) 个,右边向量里面的 \(\color{blue}1\) 就是从上往下数第 \(j\) 个。因为是下三角阵 \(\color{red}1\) 的下面都是 \(0\)\(\color{blue}1\) 的上面也都是 \(0\)。接下来讨论 \(\color{red}1\)\(\color{blue} 1\) 的位置关系。

  • \(i<j\) 时,\(\color{red}1\)\(\color{blue}1\) 的上面。右侧 \(\color{blue} 1\) 下面非零的元素对着左边的都是 \(0\),左侧 \(\color{red}1\) 上面的非零 \(a\) 对到右边也是 \(0\),因此 \(L_{ij}=0\)
  • \(i=j\) 时,\(\color{red} 1\) 正对着 \(\color{blue}1\),因此 \(L_{ij}=1\times 1=1\)
  • \(i>j\) 时,\(\color{red} 1\)\(\color{blue}1\) 的下面。\(a\) 是左侧从上往下数第 \(k\) 个。
    • \(j>k\) 时,\(\color{blue}1\)\(a\) 下面,\(a\) 对着 \(0\)\(L_{ij}=L'_{ij}\)
    • \(j=k\) 时,\(a\) 对着 \(\color{blue}1\)\(\color{red}1\) 对着 \(L'_{ij}\)\(L_{ij}=a+L'_{ij}\)
    • \(j<k\) 时,\(a\) 对着 \(L'_{kj}\)\(\color{red}1\) 对着 \(L'_{ij}\)\(L_{ij}=aL'_{kj}+L'_{ij}\)

显然,当我们向左边一个一个行变换矩阵乘过来的时候,\(L'_{ij}=0\),且 \(L'_{kj}=0\quad \forall j<k\)。于是乎 \[ L_{ij} = \begin{cases} 0, & i<j\\ 1, & i=j\\ L'_{ij}, &k<j<i \\ a, & j=k\\ 0, & j<k\\ \end{cases} \] 这就是把 \(a\) 直接放到 \(L'\) 的对应位置里面。结合数学归纳法,可以导出 \(LU\) 分解的结果确实就是几个行变换矩阵 “拼起来”。

矩阵的 LDU 分解

注意到在 \(A=LU\) 当中,我们虽然保证了 \(L\) 的主对角线是上 \(1\),但是 \(U\) 的主对角线上就未必了。

假设 \(U\) 的主对角线上的数是 \(d_1,d_2,\cdots,d_n\),那么不妨令: \[ U=DU' \] 其中 \[ D=\begin{pmatrix} d_1&0&\cdots&0\\ 0&d_2&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&d_n\\ \end{pmatrix} \]\(U'\)\(U\) 每一行分别除以 \(d_1,d_2,\cdots,d_n\) 的结果。

这样一来分解就变成了 \[ A=LDU' \]

这种分解就被称作矩阵 \(A\)\(LDU\) 分解。