学习笔记: 线性代数--矩阵的分解:LU分解n阶方阵

简介: 线性代数个人学习笔记

矩阵分解的概念:初中我们接触过数的分解,如:$\ \ 66 = 3*3*11(\color{skyblue} {\small 质因数分解})$;推广到矩阵,一个矩阵也可以分解为几个矩阵乘积的形式,矩阵分解具有不同的目的。

矩阵的LU分解的定义是将矩阵$A$分解为一个下三角矩阵($\small 矩阵的有效信息都在下三角区域$)和上三角矩阵($ \small 矩阵的有效信息都在上三角区域$)乘积的方式: $\begin{aligned} &A = L \cdot U \end{aligned} $ ,其目的是为了提高计算效率。

L:Lower Triangle Matrix $\ \ \ \ $ U:Upper Triangle Matrix
$\ \ \color{red} {\small 下三角单位矩阵} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ $ 上三角矩阵
$\begin{bmatrix} 1&0&0&0 \\ *&1&0&0 \\ *&*&1&0 \\ *&*&*&1\end{bmatrix} \ \ \ \ \ \ \ \ \ \ \ \begin{bmatrix} *&*&*&* \\ 0&*&*&* \\ 0&0&*&* \\ 0&0&0&*\end{bmatrix} $
在LU分解中,通常将一个矩阵分解成一个下三角单位矩阵和一个上三角矩阵(不保证对角线为$1$)

联系"高斯消元"过程:系数矩阵和结果矩阵拼接成的增广矩阵通过一系列初等变换,就是把一个矩阵变成了上三角矩阵的过程。即$E_{p}\cdot ... \cdot E_{3} \cdot E_{2} \cdot E_{1} \cdot A =U$
根据这条式子进行拓展有:
$\because (E_{p}^{-1}\cdot ... \cdot E_{3}^{-1} \cdot E_{2}^{-1} \cdot E_{1}^{-1})\cdot (E_{p}\cdot ... \cdot E_{3} \cdot E_{2} \cdot E_{1} )\cdot A = (E_{p}^{-1}\cdot ... \cdot E_{3}^{-1} \cdot E_{2}^{-1} \cdot E_{1}^{-1})\cdot U$
$\therefore I \cdot A = (E_{p}^{-1}\cdot ... \cdot E_{3}^{-1} \cdot E_{2}^{-1} \cdot E_{1}^{-1})\cdot U$
从中可以看出,高斯消元过程的逆操作变换矩阵就是下三角矩阵$L$:
$\therefore A=L\cdot U \color{red}{\to} L= (E_{p}^{-1}\cdot ... \cdot E_{3}^{-1} \cdot E_{2}^{-1} \cdot E_{1}^{-1}) $

一个矩阵可以进行LU分解的前提条件:对矩阵$A$的消元过程中不能涉及行交换操作(只有主元位置为0的矩阵在高斯消元过程需要进行行变换)。因为分解得到的$L$矩阵是由单位矩阵得到的,如果消元过程发生了行交换,也就意味着单位矩阵发生了行交换,对应的L矩阵就不是一个下三角矩阵。
证明如下:

假设矩阵$A= \begin{bmatrix} 0&1 \\ 1&1 \end{bmatrix}$可以进行LU分解。
根据LU分解的定义,则矩阵$A$可以分解得到一个下三角矩阵$L$和一个上三角矩阵$U$
$令 \ L= \begin{bmatrix} l_{11}&0 \\ l_{21}& l_{22} \end{bmatrix} and \ \begin{bmatrix} u_{11}&u_{12} \\ 0& u_{22} \end{bmatrix} $
通过矩阵乘法,可以得出
$\because a_{11} = l_{11} \cdot u_{11}=0, 所以必然存在 l_{11}=0 \ 或 \ u_{11} =0 $
${\small 如果是}l_{11}=0 ,{\small 那么就有}a_{12}=l_{11} \cdot u_{12} = 0,{\small 然而这就与矩阵}A 中a_{12}=1{\small 的结果相矛盾}$.
${\small 如果是}u_{11}=0 ,{\small 那么就有}a_{21}=l_{21} \cdot u_{11} = 0,{\small 然而这就与矩阵}A 中a_{21}=1{\small 的结果相矛盾}$.
$\therefore{\small \textbf{综上,矩阵A不能进行LU分解} }$

当一个矩阵不用发生行交换进行消元过程的时候,那么对应获取它的$L$矩阵直接可以通过$E$矩阵取反得到,发生行交换后,$L$矩阵不能直接由$E$矩阵取反得到。


对于主元位置为零的矩阵(也就是发生行交换才能进行LU分解的矩阵,可以使用PLU分解方法$A=P\cdot L \cdot U$,P矩阵是置换矩阵)

$LU$分解的时间复杂度的计算$\ \ \ O(0.5n^{3})$
其中$n$ 是矩阵$A_{n*n}$下三角区域需要化为$0$的元素的个数(一共约为$\frac {1}{2}n^{2}$个),完成这些元素的消元约需要进行$\frac {1}{2}n^{2}$次初等变换,而每次初等变换意味着对矩阵内一行的$n$个元素都进行了一次运算,所以由$A \to U$高斯消元过程总共约发生了$0.5n^{2} \cdot n$次数据运算},$bigO$时间复杂度约为$ O(0.5n^{3})$。由于高斯消元过程在得到$U$矩阵的同时,每次初等变换操作的值取反往单位矩阵$I$相应的位置进行填充就可以得到$L$矩阵,所以整体上$LU$分解过程的时间消耗近乎等于$A \to U$过程的时间。

$LU$分解加速线性系统求解

对于解线性系统$Ax=b$
$\small{ 矩阵A被分解为A=L\cdot U} $
$\to L \cdot U \cdot x =b$
设 $Ux=y$, 方程变为 $L \cdot y =b$ ,求出$y$的时间复杂度约为$O(n^2)$。
同样,对于$U\cdot x$,求出$x$的时间复杂度也约为$O(n^{2})$
从而,将矩阵$A$通过$LU$分解,时间复杂度总体为$O(0.5n^{3}) + 2O(n^{2})$

$LU$分解计算时间复杂度相比求解矩阵的逆的过程求解$A\cdot x=b \to x = A^{-1}\cdot b$.
矩阵通过增广矩阵的形式求逆的时间复杂度为$O{2n^{3}}$,增广矩阵有$2n^{2}$个元素要执行消元操作。然后再求解$A^{-1}\cdot b$的时间复杂度有$O(n^2)$次操作,所以通过矩阵的逆的方法求解线性系统的时间复杂度为$O(2n^{3})+O(n^2) \gt O(0.5n^{3}) + 2O(n^{2})$。

综上,LU分解求解线性系统的效率是比较高的。

简单LU过程的 python写法

import numpy as np
A = np.array([[1,2,3],[4,5,6],[3,-3,5]]) ### 创建一个用于分解的测试矩阵
L = [[1.0 if i==j else 0 for i in range(n)] for j in range(n)] ### 初始化L矩阵为单位矩阵
n = len(A) ### 创建变量n记录矩阵的行数
for i in range(n): #行遍历
    for j in range(i+1,n): #处理主元行下面的所有行化为0
        p = A[j][i] / A[i][i] ##求算主元行下面行主元列位置的元素是当前主元的倍数
        A[j] = A[j] - p*A[i] ##主元行下面行主元列位置的元素减去p倍主元化为0
        L[j][i] = p ### p直接填充到L矩阵
L
目录
相关文章
|
机器学习/深度学习 存储 vr&ar
线性代数高级--矩阵的秩--SVD分解定义--SVD分解的应用
线性代数高级--矩阵的秩--SVD分解定义--SVD分解的应用
|
5月前
线性代数——(期末突击)矩阵(下)-习题篇(初等变换求逆矩阵、矩阵乘法、求矩阵方程、求线性方程组、解齐次线性方程组)
线性代数——(期末突击)矩阵(下)-习题篇(初等变换求逆矩阵、矩阵乘法、求矩阵方程、求线性方程组、解齐次线性方程组)
75 0
|
机器学习/深度学习
学习笔记: 线性代数-矩阵的QR分解
线性代数个人学习笔记
167 0
|
移动开发
半正定矩阵和正定矩阵的一些理解和补充
半正定矩阵和正定矩阵的一些理解和补充
1678 0
|
机器学习/深度学习 人工智能 开发者
特征值分解 | 学习笔记
快速学习特征值分解
特征值分解 | 学习笔记
运用Doolitle分解法解线性方程组
运用Doolitle分解法解线性方程组
102 0
|
机器学习/深度学习
【组合数学】递推方程 ( 常系数线性非齐次递推方程 的 非齐次部分是 多项式 与 指数 组合方式 | 通解的四种情况 )
【组合数学】递推方程 ( 常系数线性非齐次递推方程 的 非齐次部分是 多项式 与 指数 组合方式 | 通解的四种情况 )
212 0