今天晚上突然被人提到一下,然后就想起来了。原来我还可以翻译姐姐的博客来着。这一篇来自这里,是介绍的LU分解。
同样也是捣鼓MathJax也花费了大量的时间呢。
线性系统
线性方程的一般形式可以写成:
a11x1+a12x2+⋯+a1nxn=b1 a21x1+a22x2+⋯+a2nxn=b2 ⋮ am1x1+am2x2+⋯+amnxn=bm,.
这等价于矩阵方程 Ax=b, 其中:
A=[a11a12⋯a1n a21a22⋯a2n ⋮⋮⋱⋮ am1am2⋯amn],x=[x1 x2 ⋮ xn],b=[b1 b2 ⋮ bm]
LU分解
我们常用把一个矩阵分解为简单形式来解矩阵。例如:上三角矩阵,对角矩阵和酉矩阵。我将要在这里介绍臭名昭著的LU分解。LU分解是高斯消元的另一种说法,它通过在矩阵左侧应用线性变换(初等行变换)把一个完整的矩阵转换为一个上三角矩阵。
假设A∈Cm,m是一个复数方阵[^1],这表示这个系统有相同数量的方程和未知数。LU分解的想法是通过引入对角线元素以下的0将A转换为m×m的上三角矩阵U。这可以通过减去每一行和他们相应的倍数做到。这个消元过程就是高斯消元,它等价于在左边给A乘上一系列的下三角矩阵 Lk 。
Lm−1⋯L2L1A=L−1A=U.
另L=L−11L−12⋯L−1m−1,我们有:
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=L−11L−12⋯L−1m−1。Li的逆矩阵就是对角线元素下所有元素取负的它自己。而且∏k=m−1k=1L−1k是具有非零子对角线元素的单位下三角矩阵。
因此我们有:
[1 11 −201 3001]−1=[1 −11 201 −3001]
最终我们得到了:
[3−7−22 −3510 6−40−5 −95−5−12]=[1 −11 2−51 −3831][3−7−22 −2−12 −11 −25]
证明
Li的逆矩阵就是对角线元素下所有元素取负的它自己。而且∏k=m−1k=1L−1k是具有非零子对角线元素的单位下三角矩阵。
证明1:
我们可以将Lk重写为
Lk=I−lke†k其中 lk=[0 ⋮ 0 lk+1,k ⋮ lm,k]
很明显e†klk=0,因此:
(I−e†klk)(I+e†klk)=I−lke†klke†k=I.
也就是说L−1k=I+lke†k. ■
证明2
从lk+1的稀疏排列中,我们可以知道e†klk+1=0。因此
L−1kL−1k+1=(I+e†klk)(I+e†k+1lk+1)=I+lke†k+lk+1e†k+1.
因此L−1kL−1k−1是一个带有L−1k和L−1k−1的非零元素的单位下三角矩阵。■