LU分解

维基百科,自由的百科全书
跳转至: 导航搜索
线性代数
向量 · 矩阵  · 行列式  · 线性空间

线性代数中,LU分解矩阵分解的一种,可以将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积(有时是它们和一个置换矩阵的乘积)。LU分解主要应用在数值分析中,用来解线性方程、求反矩陣或计算行列式

定义[编辑]

A是一个方块矩阵ALU分解是将它分解成如下形式:

其中LU分别是下三角矩阵和上三角矩阵。

例如对于一个的矩阵,就有

一个LDU分解是一个如下形式的分解:

其中D对角矩阵LU单位三角矩阵(对角线上全是1的三角矩阵)。

一个LUP分解是一个如下形式的分解:

其中LU仍是三角矩阵P是一个置换矩阵

一个充分消元的LU分解为如下形式:

存在性和唯一性[编辑]

一个可逆矩阵可以进行LU分解当且仅当它的所有子式都非零。如果要求其中的L矩阵(或U矩阵)为单位三角矩阵,那么分解是唯一的。同理可知,矩阵的LDU可分解条件也相同,并且总是唯一的。

即使矩阵不可逆,LU仍然可能存在。实际上,如果一个k的矩阵的前k个顺序主子式不为零,那么它就可以进行LU分解,但反之则不然。

目前,在任意上一个方块矩阵可进行LU分解的充要条件已经被发现,这些充要条件可以用某些特定子矩阵的秩表示。用高斯消元法来得到LU分解的算法也可以扩张到任意域上。

任意矩阵A(不仅仅是方块矩阵)都可以进行LUP分解。其中的LU矩阵是方阵,P矩阵则与A形状一样。

正定矩阵[编辑]

如果矩阵A埃尔米特矩阵,并且是正定矩阵,那么可以使,UL共轭转置。也就是说,A可以写成

这个分解被称作Cholesky分解。对每一个正定矩阵,Cholesky分解都唯一存在。此外,比起一般的LU分解,计算Cholesky分解更为快捷,并具有更高的数值稳定性

具体的表达式[编辑]

由于LDU分解唯一存在,对给定的矩阵,可以给出相应三个矩阵LDU的具体的表达式。表达式由A主子式之比构成(因此要求它们不为零)。设为矩阵D的对角线系数,则有。对的值等于A的第个顺序主子式与第个顺序主子式之比,其中约定=1。

算法[编辑]

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

这类算法的复杂度一般在左右,对充分消元的分解则不然。

杜尔里特算法[编辑]

对给定的N × N矩阵

然后定义对于n = 1,...,N-1的情况如下:

在第n步,消去矩阵A(n-1)的第n列主对角线下的元素:将A(n-1)的第n行乘以之后加到第i行上去。其中

这相当于在A(n-1)的左边乘上一个单位下三角矩阵:

于是,定义为:设

经过N-1轮操作后,所有在主对角线下的系数都为0了,于是我们得到了一个上三角矩阵:A(N-1),这时就有:

这时,矩阵A(N-1) 就是U。 下三角矩阵的逆依然是下三角矩阵,而且下三角矩阵的乘积仍是下三角矩阵,所以是下三角矩阵。 于是我们得到分解:

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

例子[编辑]

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

先将矩阵第一列元素中a11以下的所有元素变为0,即

再将矩阵第二列元素中a22以下的所有元素变为0,即

还有一种方法是通过方程求解,如下所示,将以下矩阵进行LU分解:

由于矩阵阶数只是2,可以直接列方程解:

这个线性方程组有无数多组解。因此,可以假设其中一个是单位三角矩阵,比如说L,也就是说其对角线上的两个系数都是1。这时可以解出:

也就是说

稀疏矩阵分解[编辑]

对于阶数很大的稀疏矩阵,有特别的简便算法来获得其LU分解:这时的LU也是稀疏矩阵。理论上来说,算法的复杂度约等于非零系数的个数,而不是矩阵的大小阶数。这些算法通过运用行和列的交换,使得过程中零系数因为操作而变成非零系数的次数减到最少。

一般的将零系数因为操作而变成非零系数的次数减到最少的方法是运用图论

应用[编辑]

求解线性方程[编辑]

对于给定的线性方程组

要解出x,可以进行一下步骤

  1. 首先,解方程得到y
  2. 然后解方程 得到x

在两次的求解中,我们遇到的都是三角矩阵,因此运用向前(向后)替代法就可以简洁地求解(参见三角矩阵),而不需要用到高斯消元法。然而,在将A进行LU分解时,仍然要用到高斯消元法。因此,这个方法适合在要对许多个不同的b求解时用。

求逆矩阵[编辑]

求矩阵A的逆时,可以直接求LU的逆矩阵,然后代入: 。也可以将单位矩阵分解成n个列向量,然后用上面求解线性方程的方法解出逆矩阵的列向量,然后拼起来。后者的复杂度在n2级别[來源請求],较高斯法为优。

计算行列式[编辑]

矩阵可以用来快速地计算矩阵行列式,因为det(A) = det(L) det(U),而三角矩阵的行列式就是对角线元素的乘积。如果要求L 是单位三角矩阵,那么

同样的方法也可以应用于LUP分解,只需乘上P的行列式,即相应置换的符号差

参见[编辑]

参考来源[编辑]

外部链接[编辑]