定义
定义:给定矩阵A,将A表示成下三角矩阵L和上三角矩阵U的乘积,称为LU分解。再进一步,希望L的对角元素都是1,这样利于后面的计算。
此外,形如A=LDU的分解称为LDU分解,L是下三角矩阵,D是对角阵,U是上三角矩阵,其中L和U的对角元素都是1。
对于正方矩阵来说,上面的分解结果L和U的大小显而易见,都和原矩阵A的size相同。那么对于非正方矩阵而言呢?
长矩阵B经过LU分解的结果希望是如下的形式:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200513085959117.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25zdGFyTERT,size_16,color_FFFFFF,t_70#pic_center)
宽矩阵C经过LU分解的结果希望是如下的形式:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200513090029121.png#pic_center)
为什么要LU分解
一旦完成了LU分解,利用L和U的性质,再去求行列式的值或者解线性方程组,计算量就大大减少了。
LU分解作为基本工具在各种数值计算问题中被广泛应用。例如求解线性方程组Ax=b时,只需要做一次A=LU的分解,后面面对不同的b就可以反复使用L和U了。
为什么能做到LU分解
可以先设定最终LU分解的两个矩阵中的所有未知数,之后通过原始矩阵的每个元素反解出L和U中的每个元素,这里可以以任意例子做实验。但是需要注意,如果原始矩阵的对角元素有0,那么情况就另当别论,需要对LU的样子稍作改变再进行分解。
利用LU分解求行列式值
对于方阵A,若已经有形如A=LU的LU分解,则立即可以得到行列式值detA。因为
d e t A = d e t ( L U ) = ( d e t L ) ( d e t U ) det A = det (LU) = (det L) (det U) detA=det(LU)=(detL)(detU)
所以只需要求出det L和det U即可。而下三角矩阵和上三角矩阵的行列式就是对角元素的乘积。这里det L恰好等于1,于是
d e t A = U 的 对 角 元 素 的 乘 积 det A = U的对角元素的乘积 detA=U的对角元素的乘积
利用LU分解求解线性方程组
这里以有解的情况为例,考虑n阶可逆方阵A和n维向量y,需要求解满足Ax=y的向量x。
将A进行LU分解,解方程的问题就被分为了两个步骤,LUx=y。第一步就是求出满足Lz=y的z;
第二步就是求出满足Ux=z的x。
用数学表达式表述就是
A x = L U x = L ( U x ) = L z = y A \boldsymbol{x}=L U \boldsymbol{x}=L(U \boldsymbol{x})=L \boldsymbol{z}=\boldsymbol{y} Ax=LUx=L(Ux)=Lz=y
这样有什么好处?其实,由于L和U都是具有特殊形式的矩阵,所以求解过程要简单许多。对于第一步:
( 1 车 1 孙 郑 1 李 王 卫 1 ) ( z 1 z 2 z 3 z 4 ) = ( 子 丑 寅 卯 ) \left(\begin{array}{cccc} 1 & & & \\ \text { 车 } & 1 & & \\ \text { 孙 } & \text { 郑 } & 1 & \\ \text { 李 } & \text { 王 } & \text{ 卫 } & 1 \end{array}\right)\left(\begin{array}{l} z_{1} \\ z_{2} \\ z_{3} \\ z_{4} \end{array}\right)=\left(\begin{array}{l} \text { 子 } \\ \text { 丑 } \\ \text { 寅 } \\ \text { 卯 } \end{array}\right) ⎝⎜⎜⎛1 车 孙 李 1 郑 王 1 卫