今天晚上突然被人提到一下,然后就想起来了。原来我还可以翻译姐姐的博客来着。这一篇来自这里,是介绍的LU分解。

同样也是捣鼓MathJax也花费了大量的时间呢。

线性系统

线性方程的一般形式可以写成:

a11x1+a12x2++a1nxn=b1 a21x1+a22x2++a2nxn=b2  am1x1+am2x2++amnxn=bm,.

这等价于矩阵方程 Ax=b, 其中:

A=[a11a12a1n a21a22a2n  am1am2amn],x=[x1 x2  xn],b=[b1 b2  bm]

LU分解

我们常用把一个矩阵分解为简单形式来解矩阵。例如:上三角矩阵,对角矩阵和酉矩阵。我将要在这里介绍臭名昭著的LU分解。LU分解是高斯消元的另一种说法,它通过在矩阵左侧应用线性变换(初等行变换)把一个完整的矩阵转换为一个上三角矩阵。

假设ACm,m是一个复数方阵[^1],这表示这个系统有相同数量的方程和未知数。LU分解的想法是通过引入对角线元素以下的0将A转换为m×m的上三角矩阵U。这可以通过减去每一行和他们相应的倍数做到。这个消元过程就是高斯消元,它等价于在左边给A乘上一系列的下三角矩阵 Lk

Lm1L2L1A=L1A=U.

L=L11L21Lm11,我们有:

A=LU,

其中L是下三角矩阵,U是上三角矩阵。我们常常把L做成一个单位下三角矩阵,这样就是一次单独的LU分解。

例子:

代码可以在这里找到。

译注:这里的代码要求在Julia项目的master下才能运行,如果在Julia0.6版本,可以把其中这一行uninitialized, 删除,则可以正常运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
-------------------         A        -------------------
3 -7 -2 2
-3 5 1 0
6 -4 0 -5
-9 5 -5 -12
------------------- L_{1} -------------------
1.0 ⋅ ⋅ ⋅
1.0 1.0 ⋅ ⋅
-2.0 0.0 1.0 ⋅
3.0 0.0 0.0 1.0
------------------- L_{1}A = U_{1} -------------------
3.0 -7.0 -2.0 2.0
0.0 -2.0 -1.0 2.0
0.0 10.0 4.0 -9.0
0.0 -16.0 -11.0 -6.0
------------------- L_{2} -------------------
1.0 ⋅ ⋅ ⋅
0.0 1.0 ⋅ ⋅
0.0 5.0 1.0 ⋅
0.0 -8.0 0.0 1.0
------------------ L_{2}U_{1} = U_{2} ------------------
3.0 -7.0 -2.0 2.0
0.0 -2.0 -1.0 2.0
0.0 0.0 -1.0 1.0
0.0 0.0 -3.0 -22.0
------------------- L_{3} -------------------
1.0 ⋅ ⋅ ⋅
0.0 1.0 ⋅ ⋅
0.0 0.0 1.0 ⋅
0.0 0.0 -3.0 1.0
------------------- U -------------------
3.0 -7.0 -2.0 2.0
⋅ -2.0 -1.0 2.0
⋅ ⋅ -1.0 1.0
⋅ ⋅ ⋅ -25.0
------------------- L^{-1} -------------------
1.0 ⋅ ⋅ ⋅
1.0 1.0 ⋅ ⋅
-2.0 5.0 1.0 ⋅
3.0 -8.0 -3.0 1.0

现在为了取得完整的LU分解A=LU,我们需要计算L=L11L21Lm11Li的逆矩阵就是对角线元素下所有元素取负的它自己。而且k=1k=m1Lk1是具有非零子对角线元素的单位下三角矩阵。

因此我们有:

[1 11 201 3001]1=[1 11 201 3001]

最终我们得到了:

[3722 3510 6405 95512]=[1 11 251 3831][3722 212 11 25]

证明

Li的逆矩阵就是对角线元素下所有元素取负的它自己。而且k=1k=m1Lk1是具有非零子对角线元素的单位下三角矩阵。

证明1:

我们可以将Lk重写为

Lk=Ilkek其中 lk=[0  0 lk+1,k  lm,k]

很明显eklk=0,因此:

(Ieklk)(I+eklk)=Ilkeklkek=I.

也就是说Lk1=I+lkek.

证明2

lk+1的稀疏排列中,我们可以知道eklk+1=0。因此

Lk1Lk+11=(I+eklk)(I+ek+1lk+1)=I+lkek+lk+1ek+1.

因此Lk1Lk11是一个带有Lk1Lk11的非零元素的单位下三角矩阵。