LU分解

LU分解是矩阵分解的一种,将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,有时需要再乘上一个置换矩阵。
LU分解可以被视为高斯消元法的矩阵形式。在数值计算上,LU分解经常被用来解线性方程组、且在求逆矩阵和计算行列式中都是一个关键的步骤。

一、定义

对于方阵 A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法 的LU分解是将它分解成一个下三角矩阵 L 与上三角矩阵 U 的乘积,也就是 A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_矩阵论_03
举例来说一个A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_04的矩阵 A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法 ,其 LU 分解会写成下面的形式:
A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_线性代数_06

LDU 分解

方阵 A 的LDU分解是是将它分解成一个单位下三角矩阵 L、对角矩阵 D 与单位上三角矩阵 U 的乘积,即A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_A的LU分解求A的逆矩阵 python_07
其中单位上、下三角矩阵是指对角线上全是 1 的上、下三角矩阵。事实上,LDU 分解可以推广到 A 是一般的矩阵,而非方阵。

存在性和唯一性

  1. 一个可逆矩阵可以进行LU分解当且仅当它的所有子式都非零
  2. 如果要求其中的L矩阵(或U矩阵)为单位三角矩阵,那么分解是唯一的。
  3. 即使矩阵不可逆,LU仍然可能存在。实际上,如果一个秩为k的矩阵的前k个顺序主子式不为零,那么它就可以进行LU分解,但反之则不然。

二、算法

LU分解在本质上是高斯消元法的一种表达形式。实质上是将A通过初等行变换变成一个上三角矩阵,其变换矩阵就是一个单位下三角矩阵。这正是所谓的杜尔里特算法(Doolittle algorithm),从下至上地对矩阵A做初等行变换,将对角线左下方的元素变成零,然后再证明这些行变换的效果等同于左乘一系列单位下三角矩阵,这一系列单位下三角矩阵的乘积的逆就是L矩阵,它也是一个单位下三角矩阵。

杜尔里特算法

对给定的N × N矩阵A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_08A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_线性代数_09
然后定义对于 A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_线性代数_10 的情况如下:
在第n步,消去矩阵A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_11的第n列主对角线下的元素:A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_12的第n行乘以A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_矩阵论_13之后加到第A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_A的LU分解求A的逆矩阵 python_14行上去。其中A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_机器学习_15。这相当于在A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_11的左边乘上一个单位下三角矩阵:

A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_17

于是,设A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_矩阵论_18经过N-1轮操作后,所有在主对角线下的系数都为0了,于是我们得到了一个上三角矩阵A(N-1),这时就有:
A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_19
这时,矩阵A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_矩阵论_20 就是U,A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_线性代数_21。 下三角矩阵A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_22的逆依然是下三角矩阵,而且下三角矩阵的乘积仍是下三角矩阵,所以A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_23是下三角矩阵。 于是我们得到分解:A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_线性代数_24

显然,要是算法成立,在每步操作时必须有A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_A的LU分解求A的逆矩阵 python_25。如果这一条件不成立,就要将第n行和另一行交换,由此就会出现一个置换矩阵P。这就是为什么一般来说LU分解里会带有一个置换矩阵的原因。

例子:
将一个简单的3×3矩阵A进行LU分解:

A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_26
先将矩阵第一列元素中A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_矩阵论_27以下的所有元素变为0,即
A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_机器学习_28
再将矩阵第二列元素中A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_29以下的所有元素变为0,即
A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_机器学习_30
A的LU分解求A的逆矩阵 python 用矩阵lu分解法求逆矩阵_高斯消元法_31