LU分解

在线性代数与数值分析中，LU分解是矩阵分解的一种，将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积，有时需要再乘上一个置换矩阵。LU分解可以被视为高斯消去法的矩阵形式。在数值计算上，LU分解经常被用来解线性方程组、且在求逆矩阵和计算行列式中都是一个关键的步骤。
定义.
对于方阵 formula_1， formula_1 的 LU 分解是将它分解成一个下三角矩阵 L 与上三角矩阵 U 的乘积，也就是
如果适当的改变 formula_1的行的顺序或列的顺序，就可以将 formula_1做 LU 分解。
举例来说一个 formula_6 的矩阵 A ，其 LU 分解会写成下面的形式：
事实上，并不是每个矩阵都有 LU 分解。例如，从上式可知 formula_8，若 formula_9，则 formula_10或 formula_11等于 0，故 L 或 U 是非可逆矩阵，A 必须也是非可逆矩阵。然而，存在著可逆矩阵 A 满足 formula_12，这些 A 就是没有 LU 分解的例子。该问题可借由置换 A 的各-{zh-hans:行; zh-hant:列;}-顺序来解决，最终会得到一个 A 的 PLU 分解。 
PLU 分解.
方阵 A 的 PLU 分解是是将它分解成一个置换矩阵 P、一个下三角矩阵 L 与上三角矩阵 U 的乘积，即
事实上，所有的方阵都可以写成 PLU 分解的形式，由于左乘置换矩阵 formula_14是在交换行的顺序，所以由 formula_15推得适当的交换 A 的行的顺序，即可将 A 做 LU 分解。事实上，PLU 分解有很高的数值稳定性，因此实用上是很好用的工具。
有时为了计算上的方便，会同时间换行与列的顺序，此时会将 A 分解成
其中 P、L、U 同上，Q 是一个置换矩阵。
LDU 分解.
方阵 A 的 LDU 分解是是将它分解成一个单位下三角矩阵 L、对角矩阵 D 与单位上三角矩阵 U 的乘积，即
其中单位上、下三角矩阵是指对角线上全是 1 的上、下三角矩阵。 
事实上，LDU 分解可以推广到 A 是一般的矩阵，而非方阵。此时，L 和 D 是方阵，并且与 A 有相同的-{zh-hans:行; zh-hant:列;}-，U 则有和 A 相同的长宽。注意到现在 U 是上三角的定义改为主对角线的下方都是 0，而主对角线是收集所有 formula_18 满足 i=j。
存在性和唯一性.
一个可逆矩阵可以进行"LU"分解当且仅当它的所有子式都非零。如果要求其中的"L"矩阵（或"U"矩阵）为单位三角矩阵，那么分解是唯一的。同理可知，矩阵的"LDU"可分解条件也相同，并且总是唯一的。
即使矩阵不可逆，"LU"仍然可能存在。实际上，如果一个秩为"k"的矩阵的前"k"个顺序主子式不为零，那么它就可以进行"LU"分解，但反之则不然。
目前，在任意域上一个方块矩阵可进行"LU"分解的充要条件已经被发现，这些充要条件可以用某些特定子矩阵的秩表示。用高斯消元法来得到"LU"分解的算法也可以扩张到任意域上。 
任意矩阵"A"（不仅仅是方块矩阵）都可以进行"LUP"分解。其中的"L"和"U"矩阵是方阵，"P"矩阵则与"A"形状一样。
正定矩阵.
如果矩阵"A"是埃尔米特矩阵，并且是正定矩阵，那么可以使，"U"是"L"的共轭转置。也就是说，"A"可以写成
这个分解被称作Cholesky分解。对每一个正定矩阵，Cholesky分解都唯一存在。此外，比起一般的"LU"分解，计算Cholesky分解更为快捷，并具有更高的数值稳定性。
具体的表达式.
由于"LDU"分解唯一存在，对给定的矩阵，可以给出相应三个矩阵"L"、"D"和"U"的具体的表达式。表达式由"A"的主子式之比构成（因此要求它们不为零）。设formula_20为矩阵"D"的对角线系数，则有formula_21。对formula_22，formula_23的值等于"A"的第formula_24个顺序主子式与第formula_25个顺序主子式之比，其中约定formula_26=1。
算法.
"LU"分解在本质上是高斯消元法的一种表达形式。实质上是将"A"通过初等行变换变成一个上三角矩阵，其变换矩阵就是一个单位下三角矩阵。这正是所谓的杜尔里特算法（Doolittle algorithm）：从下至上地对矩阵"A"做初等行变换，将对角线左下方的元素变成零，然后再证明这些行变换的效果等同于左乘一系列单位下三角矩阵，这一系列单位下三角矩阵的乘积的逆就是L矩阵，它也是一个单位下三角矩阵。 
这类算法的复杂度一般在formula_27左右，对充分消元的分解则不然。
杜尔里特算法.
对给定的"N" × "N"矩阵
有
然后定义对于"n" = 1...,"N-1"的情况如下：
在第"n"步，消去矩阵"A"("n-1")的第"n"列主对角线下的元素：将"A"("n-1")的第"n"行乘以formula_30之后加到第"i"行上去。其中formula_31。
这相当于在"A"("n-1")的左边乘上一个单位下三角矩阵：
于是，定义为：设
经过"N-1"轮操作后，所有在主对角线下的系数都为0了，于是我们得到了一个上三角矩阵："A"("N-1")，这时就有：
这时，矩阵"A"("N-1") 就是"U"，formula_35。
下三角矩阵formula_36的逆依然是下三角矩阵，而且下三角矩阵的乘积仍是下三角矩阵，所以formula_37是下三角矩阵。
于是我们得到分解：formula_38。
显然，要是算法成立，在每步操作时必须有formula_39。如果这一条件不成立，就要将第"n"行和另一行交换，由此就会出现一个置换矩阵"P"。这就是为什么一般来说"LU"分解里会带有一个置换矩阵的原因。
例子.
将一个简单的3×3矩阵"A"进行LU分解：
先将矩阵第一列元素中a11以下的所有元素变为0，即
再将矩阵第二列元素中a22以下的所有元素变为0，即
还有一种方法是通过方程求解，如下所示，将以下矩阵进行"LU"分解：
由于矩阵阶数只是2，可以直接列方程解：
这个线性方程组有无数多组解。因此，可以假设其中一个是单位三角矩阵，比如说"L"，也就是说其对角线上的两个系数都是1。这时可以解出：
也就是说
稀疏矩阵分解.
对于阶数很大的稀疏矩阵，有特别的简便算法来获得其"LU"分解：这时的"L"和"U"也是稀疏矩阵。理论上来说，算法的复杂度约等于非零系数的个数，而不是矩阵的大小阶数。这些算法通过运用行和列的交换，使得过程中零系数因为操作而变成非零系数的次数减到最少。
一般的将零系数因为操作而变成非零系数的次数减到最少的方法是运用图论。
应用.
求解线性方程.
对于给定的线性方程组
要解出"x"，可以进行以下步骤：
在两次的求解中，我们遇到的都是三角矩阵，因此运用向前（向后）替代法就可以简洁地求解（参见三角矩阵），而不需要用到高斯消元法。然而，在将"A"进行"LU"分解时，仍然要用到高斯消元法。因此，这个方法适合在要对许多个不同的b求解时用。
求逆矩阵.
求矩阵"A"的逆时，可以直接求"L"和"U"的逆矩阵，然后代入：formula_59 。也可以将单位矩阵分解成"n"个列向量，然后用上面求解线性方程的方法解出逆矩阵的列向量，然后拼起来。后者的复杂度在"n"2级别，较高斯法为优。
计算行列式.
矩阵formula_37和formula_61可以用来快速地计算矩阵formula_1的行列式，因为det("A") = det("L") det("U")，而三角矩阵的行列式就是对角线元素的乘积。如果要求"L" 是单位三角矩阵，那么formula_63
同样的方法也可以应用于"LUP"分解，只需乘上"P"的行列式，即相应置换的符号差。