![92ce558eed276e29b6ae725678f64200.png](https://i-blog.csdnimg.cn/blog_migrate/916196b3c80bf44d5ec2a50c944f5b16.jpeg)
哈喽,大家好,矩阵论是小师兄正在学习的课程,我总结了一些矩阵分解的资料,如解法、python代码等,将会陆续上传到知乎专栏/WX公众号(信通小师兄),欢迎各位小伙伴关注!
![fd00acb18fca84a7724aeb853c69ecc2.png](https://i-blog.csdnimg.cn/blog_migrate/cc49daee36bcedefdd3c5a3d19d5d947.png)
言归正传,回到今天的主题--LU分解。
LU分解在本质上是高斯消元法的一种表达形式。
敲重点:LU变换实质上是将A通过初等行变换变成一个上三角矩阵,其变换矩阵就是一个单位下三角矩阵。
下面为大家介绍LU的分解步骤,并给一道例题做详细解答,同时用python进行编程,需要python代码的可以下文复制粘贴,也可以回复关键词:LU分解,获取代码文件。
- LU分解就是将系数矩阵A转变成等价两个矩阵L和U的乘积 ,其中L和U分别是单位下三角矩阵和上三角矩阵。
- 当A的所有顺序主子式都不为0时,矩阵A可以分解为A=LU。其中L是下三角矩阵,U是上三角矩阵。
- 它就是从下至上地对矩阵A做初等行变换,将对角线左下方的元素变成零,然后再证明这些行变换的效果等同于左乘一系列单位下三角矩阵的过程。
- 这一系列单位下三角矩阵的乘积的逆就是L矩阵,它也是一个单位下三角矩阵。这类算法的复杂度一般在(三分之二的n三次方) 左右。
- 实际上,我们可以直接处理矩阵,得到矩阵的LU分解,这就是矩阵的直接LU分解;直接通过矩阵的元素得到计算LU元素的递推公式,不需要任何中间步骤。
1.LU分解的直接分解法(Doolittle/杜利特尔)
![3e53b9bdef008d97a6c66b7759d39bfb.png](https://i-blog.csdnimg.cn/blog_migrate/7bb076c3cab6261af3c9cdf870d0d3c6.png)
![c00e414ed6a14d96fe3021099e660274.png](https://i-blog.csdnimg.cn/blog_migrate/a50eef7576483d10b4ec52f560ce379a.jpeg)
以上的四个公式记住,就足以应对矩阵论的期末考试了
不过还是要再补充一些定理。
![76dcce732247eece610582df16d4b8be.png](https://i-blog.csdnimg.cn/blog_migrate/4a901c1c68abf365fc19ec797fd01554.jpeg)
![9e7d953a0c520753d6bc2cfb7a9dc946.png](https://i-blog.csdnimg.cn/blog_migrate/2814aff393bea918a6f543d896ae9ae4.jpeg)
现在提供一道例题,供大家练习
![4b9ed877bb80000e517e867b7a10936e.png](https://i-blog.csdnimg.cn/blog_migrate/563c48b411c2de8fde5f84999dd2403a.png)
![f39356b3c56b4805f894e61aad81b6e2.png](https://i-blog.csdnimg.cn/blog_migrate/71f0482a70865ab60e5d53a31ba52091.jpeg)
以下是python编程的代码:
LU分解的python代码实现
import numpy as np
import pandas as pd
np.random.seed(2)
def LU_decomposition(A):
n = len(A[0])
L = np.zeros([n, n])
U = np.zeros([n, n])
for i in range(n):
L[i][i] = 1
if i == 0:
U[0][0] = A[0][0]
for j in range(1, n):
U[0][j] = A[0][j]
L[j][0] = A[j][0] / U[0][0]
else:
for j in range(i, n): # U
temp = 0
for k in range(0, i):
temp = temp + L[i][k] * U[k][j]
U[i][j] = A[i][j] - temp
for j in range(i + 1, n): # L
temp = 0
for k in range(0, i):
temp = temp + L[j][k] * U[k][i]
L[j][i] = (A[j][i] - temp) / U[i][i]
return L, U
if __name__ == '__main__':
# A=np.random.randint(1,10,size=[3,3]) #注意A的顺序主子式大于零
A = [[1,2,3,4],[3,4,1,2],[4,1,2,3],[2,3,4,1]]
L, U = LU_decomposition(A)
print("L矩阵是:",L)
print("U矩阵是:",U)
下一篇给大家带来矩阵的QR、Schur、奇异值分解的步骤以及python代码的实现
![8d8c864bc4bdead73fc7e27cdf6c3eab.gif](https://i-blog.csdnimg.cn/blog_migrate/6a825a958758d94adcf4856e9f24917f.gif)
参考文献:
[1]戴华.矩阵论[M]北京:科学出版社.2001
[2]CSDN. LU分解[DB/CD].https://blog.csdn.net/reborn_lee/article/details/80947090
![c3ed6c3e1b83e39b0eced08bd4cb2ed4.gif](https://i-blog.csdnimg.cn/blog_migrate/1ba948a876a4528b0e317e33ab582339.gif)