线性代数04-矩阵LU分解
线性代数04:矩阵LU分解
上一篇文章我们深入讨论了矩阵乘法和逆矩阵,今天我们来学习矩阵LU分解。这是线性代数中非常重要的一种矩阵分解方式,在数值计算和工程应用中被广泛使用。
通过前面文章的学习,我们知道高斯消元法的本质就是对矩阵进行一系列初等行变换。而LU分解就是把这些初等行变换用矩阵乘法的形式优雅地表示出来。
知识概要
本文会涵盖以下内容:
- 逆矩阵和转置矩阵的重要性质
- 从消元矩阵的角度理解LU分解
- LU分解的计算方法和优越性
- 置换矩阵的概念和性质
逆矩阵与转置的性质补充
在进入LU分解的正题之前,我们先补充两个关于逆矩阵的重要性质,这对后面的推导很有帮助。
乘积的逆矩阵
第一个问题:如果矩阵 $A$ 和 $B$ 都是可逆方阵,那么它们的乘积 $AB$ 的逆矩阵是什么?
我们从逆矩阵的定义出发,要求 $(AB)^{-1}$ 满足:
我们来试一下 $B^{-1}A^{-1}$,看看它是否满足条件:
完美!因此我们得到结论:
这个规律可以推广到多个矩阵相乘:乘积的逆等于逆的逆序乘积。
转置与逆的关系
接下来我们介绍转置矩阵,然后看看转置和逆之间有什么关系。
转置矩阵就是将原矩阵的各行转换为各列所得到的新矩阵,记为 $A^T$。例如:
我们已经知道 $AA^{-1} = I$,现在对等式两边同时做转置运算。根据转置的运算法则,$(AB)^T = B^T A^T$,所以:
这个等式告诉我们什么呢?既然 $(A^{-1})^T$ 乘以 $A^T$ 等于单位矩阵,根据逆矩阵的定义,$(A^{-1})^T$ 就是 $A^T$ 的逆矩阵!
因此我们得到非常重要的关系式:
💡 核心结论:对于可逆方阵,转置和取逆两个运算的顺序可以互换。
矩阵的LU分解
现在我们进入正题——LU分解。我们都熟悉高斯消元法通过初等行变换将矩阵化为上三角形式。而LU分解的思想就是:把所有的消元步骤用矩阵乘法表示出来。
从消元矩阵到LU分解
回顾一下,每一步初等行变换都等价于左乘一个消元矩阵。假设我们从可逆矩阵 $A$ 出发,通过一系列初等行变换将其变为上三角矩阵 $U$,那么整个过程可以写成:
这里 $E_1, E_2$ 等等都是消元矩阵。由于消元矩阵都是可逆的,我们可以把它们都逆过去得到:
这就是 $A = LU$ 分解!其中:
- $L$ 是下三角矩阵(lower triangular)
- $U$ 是上三角矩阵(upper triangular)
所以说,LU分解本质上就是把高斯消元的过程用矩阵乘法重新表达了一遍。
一个具体的例子
我们通过一个例题来理解L矩阵有什么特别的性质。假设我们已经有:
已知:
$E_{31} = I$,求 $A = LU$ 分解后的 $L$。
思路:
我们有 $E{32}E{21}A = U$,两边同时左乘 $(E{32}E{21})^{-1}$ 得到:
所以 $L = E{21}^{-1}E{32}^{-1}$
求逆矩阵:
注意:这里逆矩阵和原矩阵的区别仅仅是消元乘数符号相反。
计算 $L$:
看到了吗?一个非常神奇的现象发生了!消元乘数 $2$ 和 $5$ 正好出现在L矩阵对应的位置,丝毫不差。
✨ 这就是LU分解最大的优点:我们不需要真的去计算一系列矩阵的逆和乘积,只需要把消元过程中得到的乘数直接放到L矩阵对应的位置就可以了!
这个结论告诉我们一个非常简便的构造方法:
在LU分解中,L矩阵记录了消元过程中所有的乘数信息。消元时用了多少倍数消去某个位置,L矩阵就在那个位置放上那个倍数。
LU分解的计算流程
我们用流程图总结一下LU分解的完整过程:
flowchart LR
A[从矩阵A出发] --> B[按高斯消元步骤<br>将A消元得到上三角U]
B --> C[将消元过程中<br>所有乘数记录下来]
C --> D[构造L矩阵:<br>对角线全为1<br>乘数放在对应位置<br>其余位置为0]
D --> E[得到A = LU分解]
LU分解的意义
为什么我们需要LU分解呢?它直接求解线性方程组 $Ax = b$ 有什么优势?
当我们把 $A$ 分解为 $A = LU$ 后,原方程组 $Ax = b$ 变为:
我们令 $y = Ux$,那么可以分两步求解:
- 先解 $Ly = b$ —— $L$ 是下三角矩阵,用前代法很容易求解
- 再解 $Ux = y$ —— $U$ 是上三角矩阵,用回代法很容易求解
相比于直接对增广矩阵 $[A | b]$ 做消元,LU分解的优势在于:如果我们需要对同一个矩阵A求解多个不同的右端项b,那么只需要做一次LU分解,之后每次只需要前代+回代即可,大大减少计算量。
这在工程实践中非常有用,比如在迭代法求解非线性问题时,每次迭代只更新右端项,这时LU分解的优势就体现出来了。
消元的运算量估计
我们来估计一下,对一个 $n \times n$ 的满矩阵进行LU分解,需要多少次运算?
我们从第一列开始:
- 第一列消元完成后,需要处理的矩阵从 $n \times n$ 变为 $(n-1) \times (n-1)$
- 这一步大约需要 $n^2$ 次运算
以此类推,总的运算量大约是:
对于大的 $n$,我们可以用积分近似求和:
所以对 $n$ 阶矩阵做LU分解,运算量大约是 $\boxed{\frac{1}{3}n^3}$ 次浮点运算。记住这个结果,我们后面讨论矩阵数值计算的时候还会用到。
置换矩阵
我们之前提到过,在高斯消元过程中,如果主元位置是0,我们需要交换两行。这个行交换操作对应的矩阵就是置换矩阵。
什么是置换矩阵
置换矩阵就是将单位矩阵 $I$ 的各行重新排列后得到的矩阵。左乘一个置换矩阵的效果就是交换矩阵的行。
我们来看一个例子:对于 $3 \times 3$ 的单位矩阵,所有可能的置换矩阵有哪些?
一共有 $3! = 6$ 个置换矩阵:
这6个矩阵构成了一个很有意思的集合:任取两个置换矩阵相乘,结果仍然是这个集合中的某个置换矩阵,它们形成了一个置换群。
置换矩阵的重要性质
置换矩阵有一个非常优美的性质:
置换矩阵的逆等于它的转置:$P^{-1} = P^T$
换句话说,置换矩阵都是正交矩阵。为什么会这样呢?我们可以直观理解:置换矩阵P是把单位矩阵的行重新排列,那么 $P^T P$ 正好是计算各行的内积,结果必然还是单位矩阵。所以 $P^T P = I$,说明 $P^{-1} = P^T$。
推广到一般情况:
- $n$ 阶置换矩阵一共有 $n!$ 个(n的阶乘个)
- 每一个置换矩阵的逆都等于它的转置
当我们需要选主元的时候,实际上就是在做行交换,行交换等价于左乘一个置换矩阵P。因此更完整的LU分解应该写成:
这里 $P$ 记录了我们所有的行交换操作。这就是选主元的LU分解。
笔者感悟
作为一名IC设计工程师,我发现LU分解在工程中的应用比我想象的要广泛得多:
- 电路仿真:在SPICE电路仿真中,我们需要反复求解线性方程组来更新节点电压,系数矩阵A变化很慢,只需要更新右端项b,这时预先做好LU分解可以大大提高仿真速度。
- 控制理论:在状态空间方法中,系统的可控性和可观测性判断涉及到矩阵分解,LU分解是很多更复杂分解的基础。
- 信号处理:在滤波器设计和信号重建中,很多迭代算法每一步都需要解线性方程组,LU分解是基础操作。
- 芯片设计中的物理分析:在电源网格分析中,需要求解大规模线性方程组,利用稀疏矩阵的LU分解可以高效得到解。
有意思的是,在实际工程中我们很少对满矩阵做LU分解。大部分工程问题产生的矩阵都是稀疏矩阵(大部分元素是0),专门针对稀疏矩阵优化的LU分解算法在EDA工具中至关重要,直接决定了芯片仿真的速度。
Gilbert Strang教授在这门课中从消元矩阵引入LU分解的思路非常巧妙,它让你明白LU分解不是什么神秘的新东西,就是我们天天在用的高斯消元的矩阵表示而已。这种”把过程结果化”的思想在数学中很常见——把一系列操作打包成一次矩阵乘法,这给后续理论分析带来了极大方便。
总结
本文要点回顾:
| 概念 | 核心结论 |
|---|---|
| 乘积的逆 | $(AB)^{-1} = B^{-1}A^{-1}$,逆序相乘 |
| 转置与逆 | $(A^T)^{-1} = (A^{-1})^T$,转置和取逆可以交换顺序 |
| LU分解定义 | $A = LU$,L是下三角矩阵(对角线全1),U是上三角矩阵 |
| L矩阵构造 | L矩阵记录了所有消元乘数,消元时用了多少乘数,直接放到对应位置 |
| 求解方程组 | $Ax=b \to Ly=b$(前代)$\to Ux=y$(回代) |
| 运算量估计 | $n$阶矩阵LU分解大约需要 $\frac{1}{3}n^3$ 次浮点运算 |
| 置换矩阵 | 由单位矩阵交换行得到,满足 $P^{-1} = P^T$ |
| 带主元LU分解 | $PA = LU$,P记录了所有行交换 |
最后放一张学习笔记留作纪念:




