矩阵的分解——LU分解

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

一、定义

对于方阵 A A A,A A A 的LU分解是将它分解成一个下三角矩阵 L 与上三角矩阵 U 的乘积,也就是 A = L U A=LU A =L U。
举例来说一个3 × 3 {\displaystyle 3\times 3}3 ×3的矩阵 A A A ,其 LU 分解会写成下面的形式:
A = [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] = [ l 11 0 0 l 21 l 22 0 l 31 l 32 l 33 ] [ u 11 u 12 u 13 0 u 22 u 23 0 0 u 33 ] {\displaystyle A={\begin{bmatrix}a_{11}&a_{12}&a_{13}\a_{21}&a_{22}&a_{23}\a_{31}&a_{32}&a_{33}\\end{bmatrix}}={\begin{bmatrix}l_{11}&0&0\l_{21}&l_{22}&0\l_{31}&l_{32}&l_{33}\\end{bmatrix}}{\begin{bmatrix}u_{11}&u_{12}&u_{13}\0&u_{22}&u_{23}\0&0&u_{33}\\end{bmatrix}}}A =⎣⎡​a 1 1 ​a 2 1 ​a 3 1 ​​a 1 2 ​a 2 2 ​a 3 2 ​​a 1 3 ​a 2 3 ​a 3 3 ​​⎦⎤​=⎣⎡​l 1 1 ​l 2 1 ​l 3 1 ​​0 l 2 2 ​l 3 2 ​​0 0 l 3 3 ​​⎦⎤​⎣⎡​u 1 1 ​0 0 ​u 1 2 ​u 2 2 ​0 ​u 1 3 ​u 2 3 ​u 3 3 ​​⎦⎤​

方阵 A 的LDU分解是是将它分解成一个单位下三角矩阵 L、对角矩阵 D 与单位上三角矩阵 U 的乘积,即A = L D U {\displaystyle A=LDU}A =L D U
其中单位上、下三角矩阵是指对角线上全是 1 的上、下三角矩阵。事实上,LDU 分解可以推广到 A 是一般的矩阵,而非方阵。

二、算法

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

对给定的N × N矩阵A = ( a n , n ) {\displaystyle A=(a_{n,n})}A =(a n ,n ​)有A ( 0 ) : = A A^{{(0)}}:=A A (0 ):=A
然后定义对于 n = 1 , . . . , N − 1 n = 1,…,N-1 n =1 ,…,N −1 的情况如下:
在第n步,消去矩阵A ( n − 1 ) A^{(n-1)}A (n −1 )的第n列主对角线下的元素: 将A ( n − 1 ) A^{(n-1)}A (n −1 ) 的第n行乘以l i , n = − a i , n ( n − 1 ) a n , n ( n − 1 ) {\displaystyle l_{i,n}=-{\frac {a_{i,n}^{(n-1)}}{a_{n,n}^{(n-1)}}}}l i ,n ​=−a n ,n (n −1 )​a i ,n (n −1 )​​ 之后加到第i i i 行上去。其中i = n + 1 , … , N {\displaystyle i=n+1,\ldots ,N}i =n +1 ,…,N。这相当于在A ( n − 1 ) A^{(n-1)}A (n −1 )的左边乘上一个单位下三角矩阵:

L n = [ 1 0 ⋱ 1 l n + 1 , n ⋱ ⋮ ⋱ 0 l N , n 1 ] {\displaystyle L_{n}={\begin{bmatrix}1&&&&&0\&\ddots &&&&\&&1&&&\&&l_{n+1,n}&\ddots &&\&&\vdots &&\ddots &\0&&l_{N,n}&&&1\\end{bmatrix}}}L n ​=⎣⎢⎢⎢⎢⎢⎢⎢⎡​1 0 ​⋱​1 l n +1 ,n ​⋮l N ,n ​​⋱​⋱​0 1 ​⎦⎥⎥⎥⎥⎥⎥⎥⎤​

于是,设A ( n ) = L n A ( n − 1 ) {\displaystyle A^{(n)}=L_{n}A^{(n-1)}}A (n )=L n ​A (n −1 )经过N-1轮操作后,所有在主对角线下的系数都为0了,于是我们得到了一个上三角矩阵A(N-1),这时就有:
A = L 1 − 1 L 1 A ( 0 ) = L 1 − 1 A ( 1 ) = L 1 − 1 L 2 − 1 L 2 A ( 1 ) = L 1 − 1 L 2 − 1 A ( 2 ) = … = L 1 − 1 … L N − 1 − 1 A ( N − 1 ) {\displaystyle A=L_{1}^{-1}L_{1}A^{(0)}=L_{1}^{-1}A^{(1)}=L_{1}^{-1}L_{2}^{-1}L_{2}A^{(1)}=L_{1}^{-1}L_{2}^{-1}A^{(2)}=\ldots =L_{1}^{-1}\ldots L_{N-1}^{-1}A^{(N-1)}}A =L 1 −1 ​L 1 ​A (0 )=L 1 −1 ​A (1 )=L 1 −1 ​L 2 −1 ​L 2 ​A (1 )=L 1 −1 ​L 2 −1 ​A (2 )=…=L 1 −1 ​…L N −1 −1 ​A (N −1 )
这时,矩阵A ( N − 1 ) A^{(N-1)}A (N −1 ) 就是U,L = L 1 − 1 … L N − 1 − 1 {\displaystyle L=L_{1}^{-1}\ldots L_{N-1}^{-1}}L =L 1 −1 ​…L N −1 −1 ​。 下三角矩阵L k {\displaystyle L_{k}}L k ​的逆依然是下三角矩阵,而且下三角矩阵的乘积仍是下三角矩阵,所以L {\displaystyle L}L是下三角矩阵。 于是我们得到分解:A = L U {\displaystyle A=LU}A =L U。

显然,要是算法成立,在每步操作时必须有a n , n ( n − 1 ) ≠ 0 {\displaystyle a_{n,n}^{(n-1)}\neq 0}a n ,n (n −1 )​​=0。如果这一条件不成立,就要将第n行和另一行交换,由此就会出现一个 置换矩阵P。这就是为什么一般来说LU分解里会带有一个置换矩阵的原因。

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

A = [ 1 2 3 2 5 7 3 5 3 ] {\displaystyle A={\begin{bmatrix}1&2&3\2&5&7\3&5&3\\end{bmatrix}}}A =⎣⎡​1 2 3 ​2 5 5 ​3 7 3 ​⎦⎤​
先将矩阵第一列元素中a 11 a_{11}a 1 1 ​以下的所有元素变为0,即
L 1 A = [ 1 0 0 − 2 1 0 − 3 0 1 ] × [ 1 2 3 2 5 7 3 5 3 ] = [ 1 2 3 0 1 1 0 − 1 − 6 ] {\displaystyle L_{1}A={\begin{bmatrix}1&0&0\-2&1&0\-3&0&1\\end{bmatrix}}\times {\begin{bmatrix}1&2&3\2&5&7\3&5&3\\end{bmatrix}}={\begin{bmatrix}1&2&3\0&1&1\0&-1&-6\\end{bmatrix}}}L 1 ​A =⎣⎡​1 −2 −3 ​0 1 0 ​0 0 1 ​⎦⎤​×⎣⎡​1 2 3 ​2 5 5 ​3 7 3 ​⎦⎤​=⎣⎡​1 0 0 ​2 1 −1 ​3 1 −6 ​⎦⎤​
再将矩阵第二列元素中a 22 a_{22}a 2 2 ​以下的所有元素变为0,即
L 2 ( L 1 A ) = [ 1 0 0 0 1 0 0 1 1 ] × [ 1 2 3 0 1 1 0 − 1 − 6 ] = [ 1 2 3 0 1 1 0 0 − 5 ] = U {\displaystyle L_{2}(L_{1}A)={\begin{bmatrix}1&0&0\0&1&0\0&1&1\\end{bmatrix}}\times {\begin{bmatrix}1&2&3\0&1&1\0&-1&-6\\end{bmatrix}}={\begin{bmatrix}1&2&3\0&1&1\0&0&-5\\end{bmatrix}}=U}L 2 ​(L 1 ​A )=⎣⎡​1 0 0 ​0 1 1 ​0 0 1 ​⎦⎤​×⎣⎡​1 0 0 ​2 1 −1 ​3 1 −6 ​⎦⎤​=⎣⎡​1 0 0 ​2 1 0 ​3 1 −5 ​⎦⎤​=U
L = L 1 − 1 L 2 − 1 = [ 1 0 0 2 1 0 3 0 1 ] × [ 1 0 0 0 1 0 0 − 1 1 ] = [ 1 0 0 2 1 0 3 − 1 1 ] {\displaystyle L=L_{1}^{-1}L_{2}^{-1}={\begin{bmatrix}1&0&0\2&1&0\3&0&1\\end{bmatrix}}\times {\begin{bmatrix}1&0&0\0&1&0\0&-1&1\\end{bmatrix}}={\begin{bmatrix}1&0&0\2&1&0\3&-1&1\\end{bmatrix}}}L =L 1 −1 ​L 2 −1 ​=⎣⎡​1 2 3 ​0 1 0 ​0 0 1 ​⎦⎤​×⎣⎡​1 0 0 ​0 1 −1 ​0 0 1 ​⎦⎤​=⎣⎡​1 2 3 ​0 1 −1 ​0 0 1 ​⎦⎤​

Original: https://blog.csdn.net/qq_28972011/article/details/123935820
Author: Lupin123123
Title: 矩阵的分解——LU分解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/614558/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球