MIT线性代数总结笔记——LU分解

矩阵分解

矩阵分解(Matrix Factorizations)就是将一个矩阵用两个以上的矩阵相乘的等式来表达。而矩阵乘法涉及到数据的合成(即将两个或多个线性变换的效果组合成一个矩阵),因此可以说,矩阵分解是对数据的一种分析。

矩阵分解

LU分解

分解形式

(

代表下三角矩阵,

代表上三角矩阵)

目的

提高计算效率

前提

(1)矩阵是方阵(

分解主要是针对方阵);

(2)矩阵是可逆的,也就是该矩阵是满秩矩阵,每一行都是独立向量;

(3)消元过程中没有

主元出现,也就是消元过程中不能出现行交换的初等变换。

LU分解

分解形式

简述

分解常用于求解工业和商业问题中的序列方程。它是最常见的求解线性系统

的方法,主要思路是:把

分解成一个下三角矩阵(Lower Triangular Matrix)和一个上三角矩阵(Upper Triangular Matrix),简称

。分解后,等式

可以写成

,这样我们令

,这样就可以通过分开求解两个等式来得到

即可以先通过

求出

,最后再用

,求出

本质上,

分解是高斯消元法的一种表达方式,为了更好地理解

分解,我们需要解释一下高斯消元法。

高斯消元法(Gaussian Elimination)

简述

为了求解线性系统,我们基本的策略是用相等的式子去替代要求解的式子,来让求解变得更容易。对于一个线性系统中有若干个未知数,我们需要将方程组中的一方程的未知数用含有另一未知数的代数式表示,并将其代入到另一方程中,这就消去了一未知数,得到一解;或将方程组中的一方程倍乘某个常数加到另外一方程中去,也可达到消去一未知数的目的,并最终得到线性系统的解。这一求解算法称之为高斯消元法(Gaussian Elimination)。

示例

下文将展示高斯消元法的求解过程,设需求解的线性方程组如下:

将其表达为矩阵形式为:

为了将多余的未知数

消除,我们需要将第三行的

消除,矩阵的第一行乘

倍再和第三行相加,得到:

接着再进行对多余的未知数

的消除,这里将第二行乘

倍再与第三行相加,得到:

至此,我们得到了一个新的三角形矩阵,转换为线性方程组的形式为:

通过简单的回代,我们最终可以得到线性方程组的解:

高斯消元法与LU分解之间的联系

那么为什么说

分解其实就是高斯消元法的一种表达方式呢?这是因为我们可以将上述示例中每一步的操作用矩阵相乘的形式(行变换的本质就是左乘矩阵)表达出来。

例如上文示例中的第一步:“为了将多余的未知数

消除,我们需要将第三行的

消除,矩阵的第一行乘

倍再和第三行相加” ,可以表达为:

同样地,第二步:“继续进行对多余的未知数

的消除,这里将第二行乘

倍再与第三行相加” 可以表达为:

因此,我们可以用一个矩阵相乘的等式来记录整个高斯消元的过程:

将三个消元矩阵合并,用

表示则为:

那么我们可以得到关于

的表达式:

这样一来我们就得到了

分解,即将矩阵A分解为一个下三角矩阵(

)和一个上三角矩阵(

)的乘积。

伪代码

U = A, L = I

for j = 1 : n - 1 do

for i = j + 1 : n do

l_ij = u_ij / u_jj

for k = j : n do

u_ik = u_ik - l_ij * u_jk

end for

end for

end for

算法效率

接下来我们来思考一下算法效率的问题,假如我们有一个

的矩阵,并且各项均非

,那我们需要计算多少次才能得到矩阵

呢?

对于这个问题我们先从列的角度来考虑,第一列消元运算结束以后,矩阵变为:

这一步中,第一列的元素运算了

次,而第一行共有

个元素,于是仅第一行与第一列消元结束后,我们就计算了

次。之后我们要研究剩下的

的矩阵,以此类推可知,最后的计算量为

接着,我们可以利用微积分计算得到,

的操作次数为

的操作次数为

次。

结合上文伪代码, 因为有三重循环嵌套,因此

分解的复杂度为

,其中加法操作为

,乘法操作为

,总共为

次,求解

各需要

前提条件

(1)矩阵是方阵(LU分解主要是针对方阵);

(2)矩阵是可逆的,也就是该矩阵是满秩矩阵,每一行都是独立向量;

(3)消元过程中没有0主元出现,也就是消元过程中不能出现行交换的初等变换。

LUD分解(LDU Decomposition)

上文中我们已经得到了

,我们还可以继续分解下去得到

为对角矩阵(Diagonal Matrix),矩阵的

分解是在

分解之后,把

再次分解,目的是把

的对角线元素都化为

,上文示例中我们得到的

如下

接下来,让

矩阵中位于对角线上的元素都为

,就可以提出一个对角矩阵

LUP分解(LU Decomposition with Partial Pivoting)

我们来考虑一个矩阵

,尽管矩阵

非奇异,并且很简单,但是使用

分解的算法会失败,因为第一个主元

。在高斯消元法中,我们常常通过人为的行变换来消除主元为

时的影响。例如我们需要把矩阵A的第一行和第二行进行交换得到

,这样我们就能将消元进行下去。这样的操作也可以用矩阵相乘的方法来表达,那么在该示例中,即为

,这里的矩阵

称为置换矩阵(Permutation Matrix)。那么就有了LUP分解(LU decomposition with partial pivoting):

。这一算法的出现显著改善了

分解算法的稳定性。

伪代码

U = A, L = I, P = I

for j = 1 : n - 1 do

Select i (>= j) that maximizes |u_ij|

Interchange rows of U: u_(j,j:n) u_(i,j:n)

Interchange rows of L: l_(j,1:j-1) l_(i,1:j-1)

Interchange rows of P: p_(j,:) p_(i,:)

for i = j + 1 : n do

l_ij = u_ij / u_jj

for k = j : n do

u_ik = u_ik - l_ij * u_jk

end for

end for

end for

matlab lud矩阵分解,MIT线性代数总结笔记——LU分解相关推荐

  1. 对矩阵分解的粗浅理解之LU分解

    ** 欢迎大家到Matlab与线性代数专栏中查看相关图文. ** 本图文从行列式计算出发引出了对矩阵LU分解的粗浅理解,希望对正在学习线性代数的同学有所帮助.

  2. [线性代数]Note4--A的LU分解转置-置换-向量空间

    继续是线性代数的学习笔记,这次的笔记包含第四.五.六节三节课的内容. 第四节课是介绍A的LU分解.A的LU分解是指将矩阵A分解成一个下三角矩阵和一个上三角矩阵的乘积.其主要应用在数值分析中,用来解线性 ...

  3. c++矩阵类_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...

    当学习完矩阵的定义以后,我们来学习矩阵的基本运算,与基本性质 矩阵的基本运算:矩阵的加法,每一个对应元素相加,对应结果的矩阵 例子:矩阵A和矩阵B表示的是同学上学期和下学期的课程的成绩,两个矩阵相加就 ...

  4. c++ 二维矩阵 转vector_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...

    当学习完矩阵的定义以后,我们来学习矩阵的基本运算,与基本性质 矩阵的基本运算:矩阵的加法,每一个对应元素相加,对应结果的矩阵 例子:矩阵A和矩阵B表示的是同学上学期和下学期的课程的成绩,两个矩阵相加就 ...

  5. python 矩阵除法_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...

    当学习完矩阵的定义以后,我们来学习矩阵的基本运算,与基本性质 矩阵的基本运算:矩阵的加法,每一个对应元素相加,对应结果的矩阵 例子:矩阵A和矩阵B表示的是同学上学期和下学期的课程的成绩,两个矩阵相加就 ...

  6. LU分解(图解与应用举例)

    三角分解(LU分解) 在线性代数中, LU分解(LU Decomposition)是矩阵分解的一种,可以将一个矩阵分解为一个单位下三角矩阵和一个上三角矩阵的乘积(有时是它们和一个置换矩阵的乘积).LU ...

  7. MIT线性代数笔记四 矩阵的LU分解

    文章目录 1. 矩阵的LU分解 2. 消元法所需运算量 3. 行互换 Row exchanges   本节的主要目的是从矩阵的角度理解高斯消元法,最后找到所谓的 LLL矩阵,使得矩阵 AAA可以转变为 ...

  8. 线性代数笔记10——矩阵的LU分解

    在线性代数中, LU分解(LU Decomposition)是矩阵分解的一种,可以将一个矩阵分解为一个单位下三角矩阵和一个上三角矩阵的乘积(有时是它们和一个置换矩阵的乘积).LU分解主要应用在数值分析 ...

  9. 用MATLAB实现plu分解,编制计算给定矩阵 A 的 LU 分解和 PLU 分解的通用程序

    用VB编写一个程序,计算出给定的10*10矩阵(存放在二维数组A中)每行元素的最大值和每列元素的最小值 ModuleModule1SubMain()DimA(,)AsInteger={{1,2,3,4 ...

最新文章

  1. python跟java-Java与Python两大幸存者谁更胜一筹呢
  2. 汇编程序开发环境搭配
  3. 传阿里旗下蚂蚁集团拟上市集资300亿美元,最快9月IPO
  4. 数据库-索引-普通索引-唯一索引
  5. ClickHouse 详细集群部署方案
  6. oracle or 循环 查询,Oracle的循环和Corsor
  7. 通过web.xml文件自动启动spring容器加载对应的配置文件
  8. 【POJ - 1751】Highways (最小生成树)
  9. kafka专题:kafka的总控制器Controller、消费者重分配策略等核心设计原理详解
  10. Java NIO(十六) Files
  11. 体验VisualStudio 2013中的内存分析功能
  12. 电脑取消撤销快捷键是什么_必须掌握的十个电脑使用技巧
  13. vue实现复制到剪切板的功能
  14. tl-wn821n无线网卡驱动 linux,tlwn821n 300m无线网卡驱动 官方最新版
  15. jenkins下载及安装
  16. 研究生自然辩证法试题题库及答案
  17. 【数据库设计及SQL代码实现】英皇电影院电影管理系统
  18. 屌丝码农该怎么过周末
  19. ip-guard控制台远程控制客户端的授权方式有几种?
  20. 如何把WORD文档中的其中一页转为横向,其它页不变,仍为纵向

热门文章

  1. X站全称是什么_B站课程排行榜,当代大学生最爱学什么?
  2. Mysql+Echarts+Python+Flask实现前后端交互及数据可视化
  3. 修改win7电脑主题脚本
  4. 深度视场角(Depth Field of View)
  5. 技术开放、平等普惠,蚂蚁金服ATEC科技大会闪耀狮城新加坡
  6. HDU 4607 Park Visit HDU暑期多校1
  7. 王者荣耀s24服务器维护,王者荣耀s24赛季更新到几点?s24新赛季维护更新时间
  8. 感动世界的50首歌和他们背后的故事3
  9. Chapter 14
  10. 短信接口被恶意调用,瞬间损失两万,怎么解决?