矩阵的分解——LU分解

2023-11-20

LU分解

LU分解是矩阵分解的一种,将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,有时需要再乘上一个置换矩阵。
LU分解可以被视为高斯消元法的矩阵形式。在数值计算上,LU分解经常被用来解线性方程组、且在求逆矩阵和计算行列式中都是一个关键的步骤。

一、定义

对于方阵 A A A A A A 的LU分解是将它分解成一个下三角矩阵 L 与上三角矩阵 U 的乘积,也就是 A = L U A=LU A=LU
举例来说一个 3 × 3 {\displaystyle 3\times 3} 3×3的矩阵 A A A ,其 LU 分解会写成下面的形式:
A = [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] = [ l 11 0 0 l 21 l 22 0 l 31 l 32 l 33 ] [ u 11 u 12 u 13 0 u 22 u 23 0 0 u 33 ] {\displaystyle A={\begin{bmatrix}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33}\\\end{bmatrix}}={\begin{bmatrix}l_{11}&0&0\\l_{21}&l_{22}&0\\l_{31}&l_{32}&l_{33}\\\end{bmatrix}}{\begin{bmatrix}u_{11}&u_{12}&u_{13}\\0&u_{22}&u_{23}\\0&0&u_{33}\\\end{bmatrix}}} A=a11a21a31a12a22a32a13a23a33=l11l21l310l22l3200l33u1100u12u220u13u23u33

LDU 分解

方阵 A 的LDU分解是是将它分解成一个单位下三角矩阵 L、对角矩阵 D 与单位上三角矩阵 U 的乘积,即 A = L D U {\displaystyle A=LDU} A=LDU
其中单位上、下三角矩阵是指对角线上全是 1 的上、下三角矩阵。事实上,LDU 分解可以推广到 A 是一般的矩阵,而非方阵。

存在性和唯一性

  1. 一个可逆矩阵可以进行LU分解当且仅当它的所有子式都非零
  2. 如果要求其中的L矩阵(或U矩阵)为单位三角矩阵,那么分解是唯一的。
  3. 即使矩阵不可逆,LU仍然可能存在。实际上,如果一个秩为k的矩阵的前k个顺序主子式不为零,那么它就可以进行LU分解,但反之则不然。

二、算法

LU分解在本质上是高斯消元法的一种表达形式。实质上是将A通过初等行变换变成一个上三角矩阵,其变换矩阵就是一个单位下三角矩阵。这正是所谓的杜尔里特算法(Doolittle algorithm),从下至上地对矩阵A做初等行变换,将对角线左下方的元素变成零,然后再证明这些行变换的效果等同于左乘一系列单位下三角矩阵,这一系列单位下三角矩阵的乘积的逆就是L矩阵,它也是一个单位下三角矩阵。

杜尔里特算法

对给定的N × N矩阵 A = ( a n , n ) {\displaystyle A=(a_{n,n})} A=(an,n) A ( 0 ) : = A A^{{(0)}}:=A A(0):=A
然后定义对于 n = 1 , . . . , N − 1 n = 1,...,N-1 n=1,...,N1 的情况如下:
在第n步,消去矩阵 A ( n − 1 ) A^{(n-1)} A(n1)的第n列主对角线下的元素: A ( n − 1 ) A^{(n-1)} A(n1)的第n行乘以 l i , n = − a i , n ( n − 1 ) a n , n ( n − 1 ) {\displaystyle l_{i,n}=-{\frac {a_{i,n}^{(n-1)}}{a_{n,n}^{(n-1)}}}} li,n=an,n(n1)ai,n(n1)之后加到第 i i i行上去。其中 i = n + 1 , … , N {\displaystyle i=n+1,\ldots ,N} i=n+1,,N。这相当于在 A ( n − 1 ) A^{(n-1)} A(n1)的左边乘上一个单位下三角矩阵:

L n = [ 1 0 ⋱ 1 l n + 1 , n ⋱ ⋮ ⋱ 0 l N , n 1 ] {\displaystyle L_{n}={\begin{bmatrix}1&&&&&0\\&\ddots &&&&\\&&1&&&\\&&l_{n+1,n}&\ddots &&\\&&\vdots &&\ddots &\\0&&l_{N,n}&&&1\\\end{bmatrix}}} Ln=101ln+1,nlN,n01

于是,设 A ( n ) = L n A ( n − 1 ) {\displaystyle A^{(n)}=L_{n}A^{(n-1)}} A(n)=LnA(n1)经过N-1轮操作后,所有在主对角线下的系数都为0了,于是我们得到了一个上三角矩阵A(N-1),这时就有:
A = L 1 − 1 L 1 A ( 0 ) = L 1 − 1 A ( 1 ) = L 1 − 1 L 2 − 1 L 2 A ( 1 ) = L 1 − 1 L 2 − 1 A ( 2 ) = … = L 1 − 1 … L N − 1 − 1 A ( N − 1 ) {\displaystyle A=L_{1}^{-1}L_{1}A^{(0)}=L_{1}^{-1}A^{(1)}=L_{1}^{-1}L_{2}^{-1}L_{2}A^{(1)}=L_{1}^{-1}L_{2}^{-1}A^{(2)}=\ldots =L_{1}^{-1}\ldots L_{N-1}^{-1}A^{(N-1)}} A=L11L1A(0)=L11A(1)=L11L21L2A(1)=L11L21A(2)==L11LN11A(N1)
这时,矩阵 A ( N − 1 ) A^{(N-1)} A(N1) 就是U, L = L 1 − 1 … L N − 1 − 1 {\displaystyle L=L_{1}^{-1}\ldots L_{N-1}^{-1}} L=L11LN11。 下三角矩阵 L k {\displaystyle L_{k}} Lk的逆依然是下三角矩阵,而且下三角矩阵的乘积仍是下三角矩阵,所以 L {\displaystyle L} L是下三角矩阵。 于是我们得到分解: A = L U {\displaystyle A=LU} A=LU

显然,要是算法成立,在每步操作时必须有 a n , n ( n − 1 ) ≠ 0 {\displaystyle a_{n,n}^{(n-1)}\neq 0} an,n(n1)=0。如果这一条件不成立,就要将第n行和另一行交换,由此就会出现一个置换矩阵P。这就是为什么一般来说LU分解里会带有一个置换矩阵的原因。

例子:
将一个简单的3×3矩阵A进行LU分解:

A = [ 1 2 3 2 5 7 3 5 3 ] {\displaystyle A={\begin{bmatrix}1&2&3\\2&5&7\\3&5&3\\\end{bmatrix}}} A=123255373
先将矩阵第一列元素中 a 11 a_{11} a11以下的所有元素变为0,即
L 1 A = [ 1 0 0 − 2 1 0 − 3 0 1 ] × [ 1 2 3 2 5 7 3 5 3 ] = [ 1 2 3 0 1 1 0 − 1 − 6 ] {\displaystyle L_{1}A={\begin{bmatrix}1&0&0\\-2&1&0\\-3&0&1\\\end{bmatrix}}\times {\begin{bmatrix}1&2&3\\2&5&7\\3&5&3\\\end{bmatrix}}={\begin{bmatrix}1&2&3\\0&1&1\\0&-1&-6\\\end{bmatrix}}} L1A=123010001×123255373=100211316
再将矩阵第二列元素中 a 22 a_{22} a22以下的所有元素变为0,即
L 2 ( L 1 A ) = [ 1 0 0 0 1 0 0 1 1 ] × [ 1 2 3 0 1 1 0 − 1 − 6 ] = [ 1 2 3 0 1 1 0 0 − 5 ] = U {\displaystyle L_{2}(L_{1}A)={\begin{bmatrix}1&0&0\\0&1&0\\0&1&1\\\end{bmatrix}}\times {\begin{bmatrix}1&2&3\\0&1&1\\0&-1&-6\\\end{bmatrix}}={\begin{bmatrix}1&2&3\\0&1&1\\0&0&-5\\\end{bmatrix}}=U} L2(L1A)=100011001×100211316=100210315=U
L = L 1 − 1 L 2 − 1 = [ 1 0 0 2 1 0 3 0 1 ] × [ 1 0 0 0 1 0 0 − 1 1 ] = [ 1 0 0 2 1 0 3 − 1 1 ] {\displaystyle L=L_{1}^{-1}L_{2}^{-1}={\begin{bmatrix}1&0&0\\2&1&0\\3&0&1\\\end{bmatrix}}\times {\begin{bmatrix}1&0&0\\0&1&0\\0&-1&1\\\end{bmatrix}}={\begin{bmatrix}1&0&0\\2&1&0\\3&-1&1\\\end{bmatrix}}} L=L11L21=123010001×100011001=123011001

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矩阵的分解——LU分解 的相关文章

随机推荐

  • 在聚会中常玩数七的游戏,七的倍数和带有七的数字都不能说,比如14,27,28。请找出1~100的不能说的数字。...

    利用ES5的filter高阶函数来实现 var arr 1 2 3 4 5 6 7 17 27 21 22 28 100 r arr filter function x return x 10 7 x 7 0 alert r 7 14 17
  • 在python中创建excel文件并写入数据

    python的包xlwt和xlsxwriter都是比较方便创建excel文件并写入数据的 工具 python3 0 首先 需要安装好相应的包 pip install xlwt 或pip install xlsxwriter xlwt中 通过
  • 谈谈JS异步处理(Promise、generator、async)

    大家都知道nodejs很快 为什么会这么快呢 原因就是node采用异步回调的方式来处理需要等待的事件 使得代码会继续往下执行不用在某个地方等待着 但是也有一个不好的地方 当我们有很多回调的时候 比如这个回调执行完需要去执行下个回调 然后接着
  • Jira、Confluence 备份 迁移

    Jira 备份 迁移 全量打包文件和数据库 将打包好的文件放到迁移的服务器 创建数据库排序规则为utf8 bin并导入备份脚本 服务器创建jira用户 gt useradd jira jira服务文件夹赋权 gt chown R jira
  • Vue中的import from

    Vue中的import from 大家都知道 import from 是用来引入一些文件的 在vue中 可能有 js文件 json文件 vue文件 在JS和JSON文件引入的时候 往往需要写入一些 例如数组 export const a 例
  • JavaScript string中includes、startsWith和endsWith的使用

    文章目录 前言 一 includes 二 startsWith 三 endsWith 总结 前言 JavaScript string的这三个方法都是根据参数返回true或false 一 includes includes 方法判断一个字符串
  • 3D点云处理:Opencv Pcl实现深度图转点云(附源码)

    文章目录 0 测试效果 1 代码实现 文章目录 3D视觉个人学习目录 0 测试效果 处理结果 1 代码实现 文章中提供的深度图像 深度图像一般以 tiff和 png保存 可以通过Opencv中的 c v i m r
  • docker入门---最全笔记

    前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识 有兴趣的小伙伴可以关注一下 也许一个人独行 可以走的很快 但是一群人结伴而行 才能走的更远 让我们在成长的道路上互相学习 让我们共同进步 欢迎关注 目录 前言 一 D
  • FFMPEG进阶系列02-ffmpeg命令详解3

    文章目录 ffmpeg 的封装转换 ffmpeg的编转码 ffmpeg 的基本编转码原理 过滤器链 filter chain 码率 帧率和文件大小 帧率 帧率和文件大小 调整视频分辨率 调整视频分辨率 scale filter调整分辨率 裁
  • Go Web编程实战(10)----模板引擎库text/template包的使用

    目录 前言 模板引擎 定义模板文件 解析模板文件 渲染模板 实战使用模板 创建 tmpl文件 创建文件用于解析与渲染模板 前言 在Go语言中 模板引擎库text template包主要用于处理任意格式的文本内容 同时还提供了html tem
  • IP网址可访问,域名网址无法访问

    可以通过修改DNS排查问题 一 修改DNS的好处 适当提高上网速度 更换DNS可以访问某些因为域名解析存在问题而不能访问的网站 可以屏蔽运营商的广告 还可以帮助您避免被钓鱼的危险 二 修改DNS带来的副作用 无法访问页面或者访问的页面不是你
  • Ubuntu 20.04 配置深度学习开发环境

    目录 写在前面 Dependency 1 安装Anaconda 1 1 下载安装包 1 2 进入安装文件夹 执行安装脚本 1 3 环境变量的配置与更新 1 4 测试安装 1 5 创建虚拟环境 2 安装英伟达驱动 法一 命令行安装 法二 GU
  • 1264 - Out of range value for column 'id' at row 1

    1 我用的是mysql 在数据插入是报错 原因是我插入的值 超过了数据库中类型和长度设置 1 1 我的插入语句 注意 id 的值 INSERT INTO test id sex name username password classes
  • Vue —— 锚点导航

    一个页面中分为多块 例如 目录一 目录二 目录三等 这就需要加上一个锚点导航的需求 提高用户的操作性 原生的写法 div class wrapper ul li a href catalogue1 目录一 a li li a href ca
  • SpringCloud概述

    SpringCloud概述 1 SpringCloud是什么 2 SpringCloud和SpringBoot关系 3 Dubbo和SpringCloud技术选型 4 SpringCloud作用 1 SpringCloud是什么 现代化的J
  • How to compile rocksdb with lz4 support

    On CentOS 6 x or 7 x you can do the following to easily install lz4 using the package manager As root sudo su is your fr
  • 137-----JS基础-----类的操作

    一 代码 不算难 如果后续操作到类的话 可以直接使用下面封装好的接口到自己的tool中
  • 线性回归建模及模型诊断

    目录 一 建模背景及目的及数据源说明 二 描述性分析 2 1 连续自变量与连续因变量的相关性分析 2 2 二分类变量与连续变量的相关性分析 2 3 多分类变量与连续变量的相关性分析 三 模型建立与诊断 3 1 一元线形回归及模型解读 3 2
  • 编码技巧——校验器(职责链+抽象模版)

    日常开发中可能遇到这样的业务场景 请求从入口进来 需要经过层层的校验 通过校验后才会执行业务操作 写操作 RPC 异步消息 这里前置的多层校验流程中 从类型上看 部分是基本参数校验 部分是包含业务逻辑的校验 并且部分校验是可以并行 部分是有
  • 矩阵的分解——LU分解

    LU分解 LU分解是矩阵分解的一种 将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积 有时需要再乘上一个置换矩阵 LU分解可以被视为高斯消元法的矩阵形式 在数值计算上 LU分解经常被用来解线性方程组 且在求逆矩阵和计算行列式中都是一个关