详解矩阵的LDU分解

目录

一. 矩阵分解

二. 解方程

三. 例题说明

四. 矩阵的LDU分解

五. 矩阵三角分解的唯一性


一. 矩阵分解

其实我们可以把一个线性系统(Linear System)看成两个三角系统(Triangular Systems),本文章将解释为什么可以这么看待解线性方程组,以及这样理解到底有什么好处。我们知道高斯消元法其实跟矩阵的三角分解有关,如下:

A=LU

其中,A为任意方阵,L为下三角矩阵且对角线处元素均为1,U为上三角矩阵。注意此处的上三角矩阵U的对角线处元素不一定为1.

利用矩阵L和U,可以直接求解Ax=b,该方程也被称之为线性系统。借助矩阵L,也就是正向消元(forward elimination),可以把b变成c。

借助矩阵U,也就是逆向替换(back substitution),可以从c来解x。那么对于任意解方程,我们可以将其标准化为两步,这两部就不需要直接利用A,如下:

观察第二个方程,两边同时乘以矩阵L,可得:

LUx=Lc

不要忘记A=LU,且Lc=b,也就可得:

Ax=b

说明以上变换是有效的。该方程的思路从理论上是行得通的。

我们都知道三角不等式是很容易解的,相关的elimination code也很容易设计。至于怎么解,我们接着往下看。

二. 解方程

根据以上讨论,我们可以把解方程分成两步。

(1)分解,factor

将矩阵A分解,找到对应的矩阵L与U。

(2)解方程,solve

综合利用L,U和b,确定最终的结果x。

从计算复杂度性的角度来讲,解三角系统的步骤只需要n^2/2步,因为三角矩阵就只有n^2/2个元素,该复杂度性应该比较好理解。

总共有两个三角系统,无论是上三角还是下三角矩阵,复杂性是一样的,只不过解的顺序不同而已。也就是一共n^2步操作即可求解两个三角系统。如果有印象的小伙伴会发现,如果直接从A入手的话,解方程复杂度为:

\frac{n^3}{3}

这也就是通常我们所说的,在不外加任何优化算法的前提下,解线性方程组的计算复杂度为:

O(n^3)

三. 例题说明

假定有一个矩阵A,需要解的方程中b=(1,1,1,1),详细的方程如下:

按照以上讨论,我们已知矩阵A和向量b,目标是求解未知向量x。我们的思路是先将其分成Lc=b,接着求解Ux=c。

首先第一步列方程可得:

很容易解该方程,可得对应的c为:

接着列出第二个方程,可得:

求解该方程可得x为:

在这个例子中,系数矩阵中的元素只有1,-1和0,所以解起来会更加简单,之前解方程的复杂度为n^2,那么现在复杂度则只有2n。比如先看第一个方程,Lc=b,我们首先解c1,接着解c2,以此类推,所以这个过程也被称之为正向(forward)求解。

接着解第二个方程Ux=c,是首先解x4,接着解x3,这也就是所谓的逆向求解(backward)。

四. 矩阵的LDU分解

在以上的分析中,其实有一个小问题,我们发现矩阵L和U地位不是均等的。换句话说,矩阵L的对角线处元素均为1,但是矩阵U并不满足此条件。矩阵U对角线处的值均为主元(pivots)。

那么我们能不能让矩阵U的对角线处元素也为1呢?

直接把矩阵U初以主元矩阵D,也就是继续做如下分解:

注意以上是以矩阵每行来理解的,也就是每行均除以对应的di,每个元素都要相应缩减。

当然在我们刚才举的例子中,该矩阵的主元di=1,也就是矩阵D是单位阵:

D=I

但这只是其中的一个例子,在刚才的例题中LU分解与LDU分解的结果是一样的,但仅仅是个例。

一般来讲,矩阵的LU分解与LDU分解往往是不一样的,当然有些地方也会将其称之为LDV分解,只是换个符号而已,本质是一样的。

结合以上,我们可以总结矩阵完整的三角分解(triangular factorization),写做:

A=LDU

该种分解在网路安全等领域很有用,其中矩阵L与U的对角线处元素均为1,D为对角阵也就是矩阵的主元

五. 矩阵三角分解的唯一性

综合以上矩阵的三角分解可以写做LDU或者写做LDV,矩阵U或者叫V的对角线处元素均为1,相当于每行均被主元矩阵D相除。这样的话,矩阵L和U的地位就是一样的。我们来看一个例子。

首先可以将矩阵A进行LU分解,也就是可以得到:

接着可以继续将其LDU分解,可以得到:

很明显可以验证发现矩阵L和U的对角线处元素均为1,矩阵D包含主元1和-2。无论是哪种分解,矩阵L是保持不变的。

很多时候,当我们解释高斯消元法时,都有一定的顺序,但其实这些顺序并不是那么重要,比如就可以利用“Crout algorithm”进行验证。

但是矩阵的LDU分解是唯一的,换句话说:

假定A可以分解成L1D1U1,也就是满足:

A=L_1D_1U_1

同理A可以分解成L2D2U2,也就是满足:

A=L_2D_2U_2

当然以上矩阵L和U均为相应的三角矩阵,且矩阵D        的对角线处元素均不为0,那么可得L,D,U都是对应相等的,也就是:

L_1=L_2,D_1=D_2,U_1=U_2

以上讨论告诉我们无论是LU分解,还是LDU分解,只要矩阵A确定了,那么分解也就确定了。

可以把这种说法,看成一个定理,该定理的证明需要利用逆矩阵,形式比较直接,此处就不啰嗦证明了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换(5)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换(4) 3.2 PCI设备的数据传递 PCI设备的数据传递使用地址译码方式,当一个存储器读写总线事务到达PCI总线时,在这条总线上的所有PCI设…

【陈工笔记-Transformer】Transformer的基础认识

对Transformer生动形象的比喻 Transformer包括了Encoder和Decoder,在知乎上看到了对两个部分关系的一种理解,非常有趣。即,“一个人学习跳舞,Encoder是看别人是如何跳舞的,Decoder是将学习到的经验和记忆,…

旷视low-level系列(一):Bayer Pattern Unification and Bayer Preserving Au

文章目录 1. Motivation2. Contribution3. Methods3.1 BayerUnify3.2 BayerAug 4. CommentsReference 1. Motivation 对于RAW域去噪,通常会将单通道bayer格式的RAW图打包成4通道,然后送入神经网络。不同厂家生产的sensor出的RAW图可能具有不同的bayer模…

SpringBoot中阿里云OSS的使用

目录 1 登录/注册阿里云并进入控制台 2 进入OSS控制台 3 创建bucket 4 查看bucket 5 获取AccessKey 6 查看帮助文档 7 添加Maven依赖 8 获取示例代码并改造成工具类 9 测试 1 登录/注册阿里云并进入控制台 2 进入OSS控制台 3 创建bucket 4 查看bucket 5 获取AccessKe…

最优化基础 - (最优化问题分类、凸集)

系统学习最优化理论 什么是最优化问题? 决策问题: (1)决策变量 (2)目标函数(一个或多个) (3)一个可由可行策略组成的集合(等式约束或者不等式约束…

Ubuntu使用Docker部署Redis并实现远程访问本地数据库

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Ub…

Windows10系统任务栏变小怎么处理

首先,邮件任务栏,点击任务栏设置; 然后,将小任务栏 使能关闭(图中为打开状态); 或者,你也可以取消锁定任务栏,然后在任务栏的边缘,进行上下拉拖动&#xff…

漏洞复现-EduSoho任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

IDC机房交换机核心技术与应用指南

IDC机房交换机核心技术与应用指南 ​ 在这个快速发展的数字时代,数据中心作为信息技术的心脏,不仅承载着海量数据的处理、存储和传输,更是支撑着全球企业运营和互联网服务的关键基础设施。在众多构成数据中心的组件中,IDC机房交换…

【运行Python爬虫脚本示例】

主要内容:Python中的两个库的使用。 1、requests库:访问和获取网页内容, 2、beautifulsoup4库:解析网页内容。 一 python 爬取数据 1 使用requests库发送GET请求,并使用text属性获取网页内容。 然后可以对获取的网页…

2024 高级前端面试题之 JS 「精选篇」

该内容主要整理关于 JS 的相关面试题,其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 JS模块精选篇 1. 数据类型基础1.1 JS内置类型1.2 null和undefined区别1.3 null是对象吗?为什么?1.4 1.toString()为什么可以调用&#xff1…

LLM之Agent(九)| 通过API集成赋能Autogen Multi-Agent系统

随着大型语言模型的快速发展,构建基于LLM驱动的自治代理(autonomous agents)已经成为一个备受关注的话题。仅在过去一年中,就出现了许多基于这一理念的新技术和框架。 ​ 本文将探索微软开源的Agent框架:Autogen…

快速搭建一个基于MVC架构的Spring Boot应用

提示:如果对 MVC 架构模式不熟悉可以看我的博客 > MVC架构模式与三层架构 快速搭建一个基于MVC架构的Spring Boot应用 一、Web 服务二、快速构建一个Spring Web MVC的 Web 应用1.使用脚手架快速的搭建环境:2.准备数据库:3.编写Dao层访问数…

一行命令在 wsl-ubuntu 中使用 Docker 启动 Windows

在 wsl-ubuntu 中使用 Docker 启动 Windows 0. 背景1. 验证我的系统是否支持 KVM?2. 使用 Docker 启动 Windows3. 访问 Docker 启动的 Windows4. Docker Hub 地址5. Github 地址 0. 背景 我们可以在 Windows 系统使用安装 wsl-ubuntu,今天玩玩在 wsl-ub…

黑群晖屏蔽更新

黑群晖屏蔽更新 修改Host删除控制面板的红点和更新提示 修改Host ssh连接群晖后执行以下命令 sudo vim /etc/hosts按i键进入编辑模式 光标移动定位到最后一行后追加以下两行 127.0.0.1 update.synology.com 127.0.0.1 update7.synology.com按esc键,然后输入:wq并…

《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换(4)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换(3) 3.2 PCI设备的数据传递 PCI设备的数据传递使用地址译码方式,当一个存储器读写总线事务到达PCI总线时,在这条总线上的所有PCI设…

[C++]priority_queue——优先级队列(含模拟实现)

一、priority_queue是什么 priority_queue 是容器适配器&#xff0c;它提供常数时间的&#xff08;默认&#xff09;最大元素查找&#xff0c;对数代价的插入与释出。 可用用户 提供的 Compare 更改顺序&#xff0c;例如&#xff0c;用 std::greater<T> 将导致最小元素作…

【LeetCode: 135. 分发糖果 + 贪心】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

物联网IOT视频设备如何快速对接阿里云生活物联网(Link Visual)并成功上云?

原文永久更新地址&#xff1a;https://www.yundashi168.com/472.html 文章来源&#xff1a;猿视野 如果有图片看不清楚&#xff0c;加载不出来&#xff0c;请阅读原文。 什么是Link Visual、 Link Visual是生活物联网平台针对视频产品推出的增值服务&#xff0c;提供视频数据上…

HDFS的standby节点启动过慢原因分析以及应对策略

HDFS的standby节点启动过慢原因分析以及应对策略 1. NN启动大致流程2. Editlog日志清理策略2.1 为什么需要合并editlog&#xff1f;2.2 什么时候删除editlog&#xff1f; 3. NN启动的日志加载策略4. Standby启动慢应对策略5. 疑问和思考5.1 如何人工阅读editlog和fsimage文件的…