4.2. 三角分解¶
三角分解 ( Triangular Decomposition ) 是把一个矩阵 \({\bm A}_{n\times n}\) 分解为一个下三角矩阵 ( Lower Triangular Matrix ) \({\bm L}\) 与一个上三角矩阵 ( Upper Triangular Matrix ) \({\bm U}\) 乘积的分解, 也可分解为一个单位下三角矩阵 ( Unit Lower Triangular Matrix ) \({\bm L}\) 与一个对角阵 ( Diagonal Matrix ) \({\bm D}\) 及一个单位上三角矩阵 ( Unit Upper Triangular Matrix ) \({\bm U}\) 乘积.
称满足如下形式的矩阵分解为 三角分解 :
4.2.1. 引言¶
考虑方程组 \({\bm A}{\bm x} = {\bm b}\) , 即
若 \({\bm A}\) 为下三角矩阵, 则有
若 \({\bm A}\) 为上三角矩阵, 则有
可见当 \({\bm A}\) 为下三角矩阵或上三角矩阵时, 方程组可以很容易求解. 下面设法将 \({\bm A}\) 化为上/下三角矩阵.
4.2.2. 高斯消元过程¶
一般消元过程¶
以上三角矩阵为例, 记 \({\bm A}^{(1)} = A\) , 且 \({\bm A}^{(k)}_{ij} = a^{(k)}_{ij}\) 采用初等行变换:
将 \({\bm A}^{(1)}\) 的第1列元素除第一个元素 \(a^{(1)}_{11}\) 外, 其余元素都化为 \(0\) , 显然若 \(a^{(1)}_{11} \neq 0\) , 可以分别以 \(-\frac{a^{(1)}_{21}}{a^{(1)}_{11}}, -\frac{a^{(1)}_{31}}{a^{(1)}_{11}}, \cdots, -\frac{a^{(1)}_{n1}}{a^{(1)}_{11}}\) 乘以第 \(1\) 行元素, 分别加到第 \(2, 3, \cdots, n\) 行得
若记 \(\left({\bm L}^{(1)}_{i1}\right)^{(-1)} = l^{(1)}_{i1} = -\frac{a^{(1)}_{i1}}{a^{(1)}_{11}}\) , \({\bm L}^{(1)}_{i1} = l^{(1)}_{i1} = \frac{a^{(1)}_{i1}}{a^{(1)}_{11}}\) , 即
则有
将 \({\bm A}^{(2)}\) 的第2列元素除前2个元素 \(a^{(2)}_{12}, a^{(2)}_{22}\) 外, 其余元素都化为 \(0\) , 显然若 \(a^{(2)}_{22} \neq 0\) , 可以分别以 \(-\frac{a^{(2)}_{32}}{a^{(2)}_{22}}, -\frac{a^{(2)}_{42}}{a^{(2)}_{22}}, \cdots, -\frac{a^{(2)}_{n2}}{a^{(2)}_{22}}\) 乘以第 \(2\) 行元素, 分别加到第 \(3, \cdots, n\) 行得
若记 \(\left({\bm L}^{(2)}_{i2}\right)^{(-1)} = l^{(2)}_{i2} = -\frac{a^{(2)}_{i2}}{a^{(2)}_{22}}\) , \({\bm L}^{(2)}_{i2} = l^{(2)}_{i2} = \frac{a^{(2)}_{i2}}{a^{(2)}_{22}}\) , 即
则有
重复如上步骤, 最终可将矩阵 \({\bm A}\) 化为上三角矩阵.
警告
上述消元过程可以执行的充要条件是矩阵 \({\bm A}\) 的各阶顺序主子式不为零, 即
主元素选取¶
若矩阵 \({\bm A}\) 的各阶顺序主子式不全为零, 则可以通过选取主元素进行消元, 核心思想是通过初等变换, 使得矩阵的顺序主子式不为零, 主元素选取包含:
列主元素法: 在矩阵的某列中选取模值最大的作为新的对角元素, 选取范围为对角线元素以下的各元素.
行主元素法: 在矩阵的某行中选取模值最大的作为新的对角元素, 选取范围为对角线元素以后的各元素.
全主元素法: 若某列元素均较小或某行元素均较小时, 可在各行各列中选取模值最大者作为对角元素.
此时, 可以通过初等变换 \({\bm P}\) 将矩阵 \({\bm A}\) 变为各阶顺序主子式不为零等矩阵 \({\bm{PA}}\) (行) \({\bm{AP}}\) (列).
注解
如对于矩阵
易知 \(\Delta_1 = 0\)
采用列主元素法, 选取 \(a_{21} = 2\) 作为主元素, 即交换前两行, 记对应初等变换为 \({\bm P}_1\) , 则
采用行主元素法, 选取 \(a_{12} = 2\) 作为主元素, 即交换前两列, 记对应初等变换为 \({\bm P}_2\) , 则
4.2.3. 变元求解¶
假设矩阵 \({\bm A}\) 可以分解为下三角矩阵 \({\bm L}\) 与上三角矩阵 \({\bm U}\) 的乘积, 即
则可得以下方程组
观察易知上述方程组没有唯一解, 而当 \({\bm L}\) 为单位下三角矩阵时( \(l_{11} = l_{22} = \cdots l_{nn} = 1\) ) 或 当 \({\bm U}\) 为单位上三角矩阵时( \(u_{11} = u_{22} = \cdots u_{nn} = 1\) ) , 方程组有唯一解.
提示
如对于二阶矩阵, 显然有
得方程组
上述方程组显然没有唯一解, 故分解不唯一, 而当 \({\bm L}\) 为单位下三角矩阵时( \(l_{11} = l_{22} = 1\) ) 或 当 \({\bm U}\) 为单位上三角矩阵时( \(u_{11} = u_{22} = 1\) ) , 方程组有唯一解. 即
或者
4.2.4. LU分解与LDU分解¶
概念与性质¶
如上所述, 易知
容易求得
令 \({\bm U} = {\bm A}^{(n)}\) , 则有 LU分解
其中:
\({\bm L}^{(1)}, {\bm L}^{(2)}, \cdots, {\bm L}^{(n-1)}\) 称为 Frobenius 矩阵
\({l_{ij}} = \frac{{a_{ij}^{(j)}}}{{a_{jj}^{(j)}}}, j < i\)
\({\bm L}\) 为下三角矩阵
\({\bm U}\) 为上三角矩阵
\({\bm L}{\bm U}\) 分解一般不唯一, 当 \({\bm L}\) 为单位下三角矩阵, 或者 \({\bm U}\) 为单位上三角矩阵时, \({\bm L}{\bm U}\) 分解唯一
若矩阵 \({\bm A}\) 可以分解为单位下三角矩阵 \({\bm L}\) 和单位上三角矩阵 \({\bm U}\) 和对角矩阵 \({\bm D}\) 的乘积, 即
则称上述分解为矩阵 \({\bm A}\) 的 \({\bm L}{\bm D}{\bm U}\) 分解.
其中 \({\bm D} = {\rm diag}(d_1, d_2, \cdots, d_n)\) 为对角元素不为零的 \(n\) 阶对角阵, 且 \(d_k=\frac{\Delta_k}{\Delta_{k-1}}\) , \(k=1,2,\cdots, n\) , \(\Delta_k\) 为 \({\bm A}\) 的 \(k\) 阶顺序主子式, 且规定 \(\Delta_0=1\) .
提示
\(n\) 阶非奇异矩阵 \({\bm A}\) 有三角分解 LU 或 LDU 的充要条件是 \({\bm A}\) 的顺序主子式 \(\Delta_k \neq 0, (k=1,2,\cdots, n)\) ;
对于任意可逆矩阵 \({\bm A}\) , 存在置换矩阵 \({\bm P}\) 使得 \({\bm P}{\bm A}\) 的所有顺序主子式全不为零.
计算方法¶
方法1: 高斯消元法
方法2: 变元求解法
高斯消元法¶
高斯消元法: 采用上述消元过程求解即可, 若矩阵 \({\bm A}\) 的各阶顺序主子式不全为零, 则可以通过选取主元素进行消元.
注解
举个例子: 求如下矩阵的 \({\bm L}{\bm U}\) 和 \({\bm L}{\bm D}{\bm U}\) 分解
解: 采用列主元素法, 选取 \(a_{21} = 2\) 作为主元素, 即交换前两行, 记对应初等变换为 \({\bm P}_1\) , 则
对上述矩阵进行消元, 可见 \({\bm A}^{(2)}\) 的第一列除对角元素外, 其它均为零, 无需进行消元, 下面对 \({\bm A}^{(2)}\) 的第2列进行消元, 有
至此已将矩阵 \({\bm A}\) 转为上三角矩阵, 且 \({\bm{A}} = {\bm{P}}_1^{ - 1}{{\bm{A}}^{(2)}} = {\bm{P}}_1^{ - 1}{{\bm{L}}^{({\rm{2}})}}{{\bm{A}}^{(3)}}\)
对于 \({\bm A}={\bm{LU}}\) 分解, 有
对于 \({\bm A}={\bm{LDU}}\) 分解, 有
则
提示
上述求解过程可通过如下方法简化:
将矩阵 \({\bm A}\) 与单位矩阵 \({\bm I}\) 组成新矩阵 \([{\bm A}|{\bm I}]\)
采用高斯消元法, 每次仅对待消元的子矩阵进行初等行变换, 如第二次消元时, 不再对第一列的元素进行初等变换
如此循环往复, 将矩阵 \({\bm A}\) 的主对角元素下的元素全部化为0, 矩阵 \({\bm A}\) 化为上三角矩阵 \({\bm U}\) , 矩阵 \({\bm I}\) 变为单位下三角矩阵的逆 \(({\bm L}^{(n-1)}\cdots {\bm L}^{(2)}{\bm L}^{(1)})^{-1} = {\bm L}^{-1}\) .
代码实现¶
在 Matlab 中可以通过函数 lu
求解.
上述例子的 matlab 代码求解如下:
>> A = [0 2 2;2 1 2; 0 2 1]
>> [L,U] = lu(A)
L =
0 1 0
1 0 0
0 1 1
U =
2 1 2
0 2 2
0 0 -1
>> [L,U, P] = lu(A)
L =
1 0 0
0 1 0
0 1 1
U =
2 1 2
0 2 2
0 0 -1
P =
0 1 0
1 0 0
0 0 1
4.2.5. 其它三角分解¶
根据上述介绍, 对 \({\bm {LDU}}\) 分解的形式进行一下组合和限定, 可以得到 Doolittle 分解, Crout 分解, 和 Cholesky 分解.
Crout 分解¶
设矩阵 \({\bm A}\) 有唯一的 \({\bm {LDU}}\) 分解, 将 \({\bm{LD}}\) 结合起来, 并用 \(\hat{{\bm L}}\) 表示, 则称
为矩阵 \({\bm A}\) 的 Crout 分解 . 可知 Crout 分解中, \({\bm U}\) 为单位上三角矩阵.
求解方法¶
上述变元求解法与高斯消元法即可求解.
Doolittle 分解¶
设矩阵 \({\bm A}\) 有唯一的 \({\bm {LDU}}\) 分解, 将 \({\bm{LD}}\) 结合起来, 并用 \(\hat{{\bm L}}\) 表示, 则称
为矩阵 \({\bm A}\) 的 Doolittle 分解 . 可知 Doolittle 分解中, \({\bm L}\) 为单位下三角矩阵.
求解方法¶
上述变元求解法与高斯消元法即可求解.
Cholesky 分解¶
设矩阵 \({\bm A}\) 为实对称正定矩阵, 有唯一的 \({\bm {LDU}}\) 分解, 将 \({\bm L}\) 与 \({\bm D}\) 的平方根结合起来, 记为 \({\bm G}\) 为下三角矩阵, 则称
为矩阵 \({\bm A}\) 的 Cholesky 分解 ( 或 平方根分解 , 对称三角分解 ).
易知, \({\bm G} = {\bm{L}\bar{\bm D}}\) 为下三角矩阵, 其中 \({\bm D} = {\rm diag}(d_1, d_2, \cdots, d_n)\) , \(\bar{{\bm D}} = {\rm diag}(\sqrt{d_1}, \sqrt{d_2}, \cdots, \sqrt{d_n})\) \(d_i>0\) .
提示
设矩阵 \({\bm A}\) 为实对称正定矩阵, 则有 \(\Delta_k > 0\) , 于是 \({\bm A}\) 有唯一的 \({\bm {LDU}}\) 分解, 其中, \({\bm D} = {\rm diag}(d_1, d_2, \cdots, d_n)\) , 记 \(\bar{{\bm D}} = {\rm diag}(\sqrt{d_1}, \sqrt{d_2}, \cdots, \sqrt{d_n})\) ,则有
由 \({\bm A}^T = {\bm A}\) 知
由分解的唯一性知 \({\bm L} = {\bm U}^T\) , \({\bm U} = {\bm L}^T\)
所以有
进一步地, 有
其中, \({\bm G} = {\bm{L}\bar{\bm D}}\) .
求解方法¶
上述变元求解法与高斯消元法即可求解,
可以先求 Doolittle 分解;
Doolittle 分解中的 \({\bm L}\) 即为 Cholesky 分解中的 \({\bm L}\) ;
Doolittle 分解中的 \(\hat{\bm U}\) 对角线元素构成 \({\bm D}\) ;
取 \({\bm L}\) 与 \({\bm D}\) 的平方根的乘积 \({\bm G} = {\bm L}\bar{\bm D}\) 即为所求.
注解
举个例子, 求以下矩阵的 Cholesky 分解
解: 先求矩阵的 Doolittle 分解, 设 \({\bm L}\) 和 \(\hat{{\bm U}}\) 如下
求解得到 \(l_{21}=\frac{2}{5}, l_{31}=-\frac{4}{5}, l_{32}=-2\) , \(u_{11}=5, u_{12}=2, u_{13}=-4\) , \(u_{22}=\frac{1}{5}, u_{23}=-\frac{2}{5}, u_{33}=1\) , 则有
易知 \({\bm D} = {\rm diag}(5, 1/5, 1)\) , \(\bar{\bm D} = {\rm diag}(\sqrt 5, 1/{\sqrt 5}, 1)\) , 从而有
代码实现¶
在 Matlab 中可以通过函数 chol
求解.
>> A = [5 2 -4; 2 1 -2; -4 -2 5]
A =
5 2 -4
2 1 -2
-4 -2 5
>> G = chol(A, 'lower')
G =
2.2361 0 0
0.8944 0.4472 0
-1.7889 -0.8944 1.0000
>> G*G'
ans =
5.0000 2.0000 -4.0000
2.0000 1.0000 -2.0000
-4.0000 -2.0000 5.0000