目录
老饼讲解:一步一步上手学习

【介绍】矩阵分解之- LU分解

作者 : 老饼 发表日期 : 2025-12-30 00:51:41 更新日期 : 2026-05-11 23:35:26
老饼讲解-简单易懂,干货满满,爽过嗦螺!


矩阵的LU分解是一种针对方阵的分解,它将矩阵分解成下三角矩阵L和上三角矩阵U的积,即A=L*U,矩阵的LU分解常见的有三种:Doolittle分解、Crout分解和Cholesky分解,它们各有特色,下面我们来看看这三种LU分解分别是什么,以及具体的代码实现。

一、矩阵的LU分解

1.1. LU分解是什么

LU分解是指将方阵A分解为下三角矩阵L与上三角矩阵U的乘积,也就是将方阵A分解为:

 

 其中,L是下三角矩阵,U是上三角矩阵

也就是如下形式:

LU分解

1.2. LU分解有哪些

事实上,LU分解的方法有许多,常见的有Doolittle分解、Crout分解和Cholesky分解。

三种LU分解方法的特点如下:

Doolittle分解   :L对角元全为1(即单位下三角矩阵)  

Crout分解        :U对角元全为1(即单位上三角矩阵) 

Cholesky分解  :U是L的转置(要求A必须是正定对称方阵)  

如下所示:

Doolittle分解

Crout分解

Cholesky分解 

二、LU分解-代码实现

好了,下面我们看一下在python中如何利用scipy来实现LU分解。具体代码实现如下:

"""
本代码用于展示scipy实现LU分解
本代码来自《老饼讲解-机器学习》www.bbblearn.com
"""
import numpy as np
from  scipy import linalg

# 创建一个示例矩阵
A = np.array([[16,24,4], [24,45,15], [4,15,14]], dtype=float)
print('\n矩阵A:',A)

# Doolittle分解
P, L, U = linalg.lu(A)
print('\n---Doolittle分解----')
print('\nL:',L)
print('\nU:',U)
print('\nL*U:',L@U)


# Cholesky分解
L = linalg.cholesky(A,lower=True)
print('\n---Cholesky分解----')
print('\nL:',L)
print('\nL*L^T:',L@L.T)

代码运行结果如下:

LU分解的结果

可以看到,Doolittle分解得到的L对角线元素全为1,的结果与被分解的矩阵A是一样的。

同样地,Cholesky分解只能得到一个下三角矩阵L,而的结果与被分解的矩阵A是一样的。

总结

LU分解就是将矩阵分解为下三角矩阵与上三角矩阵的积,常用的LU分解有三种:Doolittle分解、Crout分解和Cholesky分解。其中,Doolittle分解是L的对角线元素为1,而Crout分解是U的对角线元素为1,Cholesky分解只适用于正定矩阵,它分解为 



图标 评论
添加评论