矩阵分解 (乘法篇)

2023-05-16

引自简书:https://www.jianshu.com/p/0741789ffd06

引言

前面我们在矩阵分解 (加法篇)里面分析的加法下的矩阵分解。 这里我们来看看乘法下矩阵分解的要点。

对角和三角矩阵

首先, 我们总结下, 在矩阵加法分解中出现了三种矩阵:上三角矩阵, 下三角矩阵 和 对角阵。  这三种矩阵在乘法的分解中也会遇到。

那么是不是乘法矩阵中有这三种矩阵就够了呢? 不是的!

正交矩阵

还有一种经典的矩阵, 叫正交矩阵, 什么叫正交矩阵呢?其实某种意义上, 郑正交矩阵也是通过矩阵乘法来定义的。 如果一个矩阵和它的转置矩阵的乘积为单位矩阵, 那么这个矩阵就是正交矩阵。

有了正交矩阵之后, 很容易得到一个结论就是正交矩阵的转置就是它的逆矩阵。

那么很容易就知道,单位矩阵本身就是正交矩阵。

为什么叫正交矩阵呢?因为如果我们把这个矩阵写成向量的形式, 那么这些向量除了自己和自己的点积为1,其他任意两个不同向量之间的点积全部为0.而向量点积为0的情况叫正交。 正交矩阵是因此得名的。

为什么要讲正交矩阵呢?还记得在矩阵的加法分解里面, 有求逆矩阵的情况么? 试想一下,如果不要求逆矩阵了, 而是求解转置矩阵的话, 那是不是异常方便? 对的, 这就是正交矩阵的强大的优势。

那么, 常见的LU, LDL, QR,SVD分解到底是什么?我们已经知道, 首先他们全是乘法分解。

常见乘法分解

LU分解

LU分解, 故名思议就是, 把矩阵分成下三角矩阵(Lower)和上三角矩阵(Upper)的一种分解。 所以LU分解只用到了三角矩阵。

当然更进一步, 可以要求是一个稍微特殊点的三角矩阵, 就是下三角矩阵L对角线全1, 或者上三角矩阵U对角线元素全部为1.

下面有个具体的例子, 大家可以试试:

LDU分解

在LU的基础上, 如果我们再进一步,引入对角矩阵(Diagonal)D, 那么LU分解就变成了LDU分解。 是不是很直观?

而从LU分解到LDU分解是很容易做到的,只要把对角线的元素提取出来作为对角矩阵, 然后其他除以对角线元素进行等比例缩放。

这也很容易去解释,为什么LU分解可以写成对角线全1的三角矩阵, 因为可以提取出一个对角矩阵, 然后乘到左边下三角矩阵或者右边上三角矩阵去。 因此, 从本质上来说LDU分解和LU分解没有差别。 所以常常把LDU分解忽略, 直接用LU分解来说明。

LDL分解

既然有了LDU分解, 那么LDL分解的字面上的意思就比较明确了, 就是下三角形L乘以对角矩阵, 再乘以下三角矩阵。 对么?  说对, 也对。 说不对也不对。

我们来看一下, 其实最右边不是下三角矩阵,依然是上三角矩阵。 但是这个上三角矩阵, 是最左边的下三角矩阵的转置, 所以依然是最左边的下三角矩阵。  所以右边这个L的含义是左边的L的转置。

既然一个矩阵A能够这么分解, 那么我们知道A的转置和A是一样的, 因为LDL的转置刚好是它本身。

举个LDL的例子:

所以本质上来看,对称矩阵的LDL分解就是LDU分解的一种特例。 那么前面我们提到,LDU分解是LU分解的另外一种表达。 那么,对称矩阵也可以进行LL分解的。

对应到上面的例子:

LDL 和LL分解合起来称为乔里斯基分解Cholesky decomposition。 它是由法国数学家Cholesky发明的。

那么哪里去找到对称矩阵呢?其实很多时候, 是用来对(A^T)A进行分解的。

我们知道协方差矩阵就是经常写成(A^T)A这种形式,因此LDL和LL分解在相关性分析里面经常使用。

另外一个Cholesky分解的特点就是,因为它的元素的对称性限制, 所以计算起来更快!

QR分解

前面的分解都没有用到正交矩阵, 而QR分解和SVD分解就要利用到正交矩阵。 Q是一个正交矩阵, 而R是一个上三角矩阵。

前面我们提到单位矩阵也是正交矩阵, 所以正交矩阵可以看成是坐标系的转换。 所以有时候, QR分解也可以表示成如下形式。

所以QR分解,是正交矩阵和三角矩阵的乘法分解。

SVD分解

SVD分解称为Singular value decomposition奇异值分解, 它是正交矩阵和对角矩阵的乘法分解。

所以, 从形式上, SVD可以表示成如下:

乘法分解的形式小结

所以乘法分解就是把矩阵表示称为三角阵, 对角阵, 和正交矩阵的。

其中:

1)  LU,  LL是分解为三角矩阵的乘法

2)  LDU, LDL 是分解为三角矩阵、和对角矩阵的乘法

3)  QR 是分解为正交矩阵和三角矩阵的乘法

4)  SVD 是分解为正交矩阵 和 对角矩阵的乘法

如果把三角矩阵、对角矩阵 和 正交矩阵称为因子矩阵, 为什么要分解成这些因子矩阵呢?

因子矩阵的几何含义

对角矩阵

乘以一个对角矩阵,好比对每个坐标轴进行缩放!

正数的乘法: 正数好比在原方向上的缩放, 大于1,表示伸长, 小于1,表示缩小。

负数的乘法:负数表示反反向。

零的乘法:零表示空间压缩。

所以, 对角矩阵就是缩放,包括方向,和压缩。

三角矩阵

和对角矩阵相比,三角矩阵要多一些角上的元素, 那么这些元素有什么作用呢?

上三角矩阵: 上三角矩阵的作用好比进行右上的切变, 水平的斜拉。

下三角矩阵:同样是切边, 不过是往左下切边, 垂直方向的下拉。

所以三角矩阵的作用就是切变。

正交矩阵

类似的, 我们可以看一下正交矩阵的作用, 我们找可以利用一个正交矩阵, 找到对应乘法后的点的变化。

我们可以看到正交矩阵, 并不改变物体的形状, 但是进行了旋转。

矩阵分解的几何意义

综上所述, 矩阵因子的作用就是要把缩放, 切边, 和旋转分解出来理解一个矩阵的作用。

在这种情况下,矩阵乘法的分解就是连续进行几次变化的综合!

我们知道LU/LDU/LL/LDL分解和QR/SVD分解里面, 都有三角阵部分。 那么三角阵到底有什么优势呢?

三角阵进行方程求解的优势

我们知道三角阵在进行高斯消元法的时候, 很容易进行化简, 逐层迭代进行计算求解。

所以三角阵除了有明确的几何含义,还有方程求解的极大便利性!这就是为什么三角阵这么受欢迎的原因!

LU分解的意义

LU分解使得矩阵AX=b的求解分成了LU两部分。

而三角矩阵的好处是可以很容易进行连续代入求解! 这样可以先进行下三角矩阵的求解:

然后再进行上三角矩阵的求解。

这样能够快速进行求解。 所以,LU分解把矩阵变成横向的切边和竖直方向的切变后, 能够带来计算上的极大的便利性。   同时这种分解, 存储空间大小上几乎没有太多影响!

类似,我们可以理解LDU,LL, LDL的好处了。

QR分解的意义

从几何上QR分解,就是先进行旋转, 然后再进行切变的过程。

同时, 利用正交矩阵的旋转性, 可以同样很容易化解到三角矩阵乘法去求解。

这个过程中, 并不需要进行求逆运算, 只需要进行转置运算和乘法运算。 然后就可以利用三角不等式逐层迭代求解的便利性。

SVD分解的意义

按照前面给出的几何含义, SVD 分解可以看成先旋转, 然后进行分别缩放, 然后再旋转的过程。

类似的, 同样计算上还带来了极大的便利性!

矩阵分解的应用

除了计算上带来的极大便利性,分解因子的几何意义还使得矩阵乘法分解有其他很多应用。

相关性分析

LL相关的分析很容易就被用到相关性分析上去。

特征值和特征向量求解

SVD分解还可以用来做特征值和特征向量的求解。

小结:

通过对分解因子的几何含义的描述, 分析了LU, LDU, LL, LDL, QR, SVD分解带来的计算便利性和几何含义。 稍微拓展了下应用。



作者:史春奇
链接:https://www.jianshu.com/p/0741789ffd06
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

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

矩阵分解 (乘法篇) 的相关文章

  • ROS : 参数服务器之动态调参(dynamic_reconfigure)

    另外参考链接 xff1a ROS动态参数配置 xff1a dynparam命令行工具的使用 xff08 示例 43 代码 xff09 肥肥胖胖是太阳的博客 CSDN博客 参数服务器实现的功能 xff1a 修改参数后 xff0c 不需要重新编
  • ROS中static_transform_publisher工具的使用

    static transform publisher的功能是发布两个坐标系之间的静态坐标变换 xff0c 这两个坐标系不会发生相对位置变化 命令格式为 xff1a static transform publisher x y z yaw p
  • Docker 下载redis

    首先去docker hub 获取下载命令Docker Hub 如图 xff1a docker pull redis 为最新版本 也可以 指定版本列如 xff1a docker pull redis 6 2 6 bullseye 下载成功 r
  • VSCode 如何查看git提交的历史记录或逐行记录

    下载两个插件就行了 Git History GitLens 安装成功之后 xff0c 任意选择一个文件 xff0c 你鼠标点击哪一行代码 xff0c 后面都会提示谁在什么时候做了什么 xff0c 鼠标悬浮提示上便会直接显示作者 xff0c
  • 电池、电机、螺旋桨搭配

    电池 电机 螺旋桨搭配 span class hljs number 1 span 电机 span class hljs number 1 span 电机KV值 xff1a 大KV配小桨 xff0c 小KV配大桨 KV值是每1V的电压下电机
  • 为什么指针变量做形参可以改变实参的数据

    形参不能传任何东西给实参 xff0c 实参传过去的东西都是一个副本 下面以一个交换数据的被调函数片段为例 在指针变量由实参传递给形参时传过去的实际是指针变量的值 xff0c 即一个地址 xff0c 在 t 61 p1 p1 61 p2 p2
  • 敲线性表代码时遇到的问题(C++)【exit,return】

    1 xff1a exit OVERFLOW exit简介 为C 43 43 的退出函数 xff0c 声明于stdlib h中 xff0c 对于C 43 43 其标准的头文件为cstdlib 声明为 void exit int value e
  • /etc目录详解

    Linux etc目录详解 etc目录 包含很多文件 许多网络配置文件也在 etc 中 etc rc or etc rc d or etc rc d 启动 或改变运行级时运行的scripts或scripts的目录 etc passwd 用户
  • Tomcat 8.0 Mac 安装与配置

    工具 原料 1 xff0c JDK xff1a 版本为jdk 8u40 macosx x64 dmg 下载地址http www oracle com technetwork java javase downloads jdk8 downlo
  • 2011届移动开发者大会

    2011年11月4号星期五 xff0c 早晨八点我们就早早的来到了会场 xff0c 因为有了上次云计算大会的经验 xff0c 所以我们早早的就来了 xff0c 因为人很多我们必须才能找到一个比较好的位置 由于来的太早工作人员很多都没有就位
  • 第五篇 openvslam建图与优化模块梳理

    建图模块 mapping module在初始化系统的时候进行实例化 xff0c 在构建实例的时候会实例化local map cleaner和local bundle adjuster 系统启动的时候会在另外一个线程中启动该模块 code s
  • 个人安卓学习笔记---java.io.IOException: Unable to open sync connection!

    在使用手机调试程序的时候出现了java io IOException Unable to open sync connection 这样的异常 xff0c 我尝试使用拔掉USB然后重新 xff0c 插入 xff0c 结果失败 再尝试 xff
  • "_OBJC_CLASS_$_Play", referenced from:

    IOS做了这么久也没写过什么博客 xff0c 不好不好 xff0c 今天开始写 遇到的问题 xff1a 34 OBJC CLASS Play 34 referenced from 解决方案 xff1a Tagert Build Phases
  • 树莓派SSH远程连接连接失败的解决办法

    树莓派SSH远程连接 将全新的树莓派系统烧录 xff0c 开机然后用SSH远程连接 xff0c 结果SSH连接提示 connection refused xff0c 导致连接树莓派失败 出现错误的原因是自 2016 11 25 官方发布的新
  • 在树莓派中安装ROS系统(Kinetic)

    在树莓派中安装ROS系统 重新梳理了一下树莓派的安装流程 xff0c 现在我们来开始吧 打开官网教程 http wiki ros org kinetic step1 安装源 xff08 中国 xff09 sudo sh c 39 etc l
  • ROS学习笔记-roscd指令

    对ROS文件系统而言 xff0c ROS中的roscd命令实现利用包的名字直接切换到相应的文件目录下 xff0c 命令使用方法如下 xff1a span class hljs tag roscd span span class hljs a
  • configure it with blueman-service

    用下面这个命令把Linux目录的名字由中文改成英文了 export LANG span class hljs subst 61 span en US xdg span class hljs attribute user span span
  • 关于Ubuntu16.04升级系统后启动报错问题的修复

    关于Ubuntu16 04升级系统后启动报错问题的修复 Ubuntu16 04升级后启动报错为 Failed to start Load Kernel Modules 使用systemctl status systemd modules l
  • Ubuntu Mate 自动登录

    树莓派安装Ubuntu Mate 设置自动启动 需要修改文件 usr share lightdm lightdm conf d 60 lightdm gtk greeter conf sudo vim usr share lightdm l
  • Linux系统调用实现简析

    1 前言 限于作者能力水平 xff0c 本文可能存在谬误 xff0c 因此而给读者带来的损失 xff0c 作者不做任何承诺 2 背景 本篇基于 Linux 4 14 43 ARM 32 43 glibc 2 31 进行分析 3 系统调用的实

随机推荐

  • Docker中容器的备份、恢复和迁移

    1 备份容器 首先 xff0c 为了备份 Docker中的容器 xff0c 我们会想看看我们想要备份的容器列表 要达成该目的 xff0c 我们需要在我们运行着 Docker 引擎 xff0c 并已创建了容器的 Linux 机器中运行 doc
  • 关于OpenCV的那些事——相机姿态更新

    上一节我们使用张正友相机标定法获得了相机内参 xff0c 这一节我们使用 PnP Perspective n Point 算法估计相机初始姿态并更新之 推荐3篇我学习的博客 xff1a 姿态估计 Pose estimation algori
  • Java中接口(Interface)的定义和使用

    有关 Java 中接口的使用相信程序员们都知道 xff0c 但是你们知不知道接口到底有什么用呢 xff1f 毫无疑问 xff0c 接口的重要性远比想象中重要 接下来我们便一起来学习Java中接口使用 Java接口是什么 Java接口是一系列
  • Java中向下转型的意义

    什么是向上转型和向下转型 在Java继承体系中 xff0c 认为基类 xff08 父类 超类 xff09 在上层 xff0c 导出类 xff08 子类 继承类 派生类 xff09 在下层 xff0c 因此向上转型的意思就是把子类对象转成父类
  • Java中单例模式的使用

    什么是单例模式 单例模式 xff0c 也叫单子模式 xff0c 是一种常用的软件设计模式 在应用这个模式时 xff0c 单例对象的类必须保证只有一个实例存在 许多时候整个系统只需要拥有一个的全局对象 xff0c 这样有利于我们协调系统整体的
  • Android RecyclerView完全解析

    什么是RecyclerView xff1f RecyclerView 是谷歌 V7 包下新增的控件 用来替代 ListView 的使用 在 RecyclerView 标准化了 ViewHolder 类似于 ListView 中 conver
  • 程序员也是会浪漫的->打造浪漫的Android表白程序

    一年前 xff0c 看到过有个牛人用HTML5绘制了浪漫的爱心表白动画 xff0c 后来又在华超的这篇文章上看到大神用Android写出了相同的效果 xff0c 于是也动手写了一下 xff0c 并加了一些功能 xff0c 感谢大神的指引 写
  • 清浅时光,岁月静好——我的2016

    前言 时光在不经意中流逝 xff0c 翻开旧日的笔记 xff0c 字里行间充满着情深意境的交错 仿佛回到了那曾经经历过的风风雨雨 xff0c 坎坎坷坷中逝去 xff0c 旧时的回忆依旧 xff0c 只是少了几分忧郁 xff0c 几分繁华 x
  • Android登录注册功能封装

    我们都知道Android应用软件基本上都会用到登录注册功能 xff0c 那么对一个一个好的登录注册模块进行封装就势在必行了 这里给大家介绍一下我的第一个项目中所用到的登录注册功能的 xff0c 已经对其进行封装 xff0c 希望能对大家有帮
  • Kotlin 官方学习教程之扩展

    扩展 类似于 C 和 Gosu xff0c Kotlin 也提供了一种可以在不继承父类也不使用类似装饰器这样的设计模式的情况下对指定类进行扩展的功能 这是通过称为扩展名的特殊声明来实现的 Kotlin 支持函数扩展和属性扩展 函数扩展 要声
  • Kotlin 官方学习教程之密封类与泛型

    密封类 密封类用于表示受限类层次结构 xff0c 当值可以有一个有限集合的类型 xff0c 但不能有其他类型 它们在某种意义上是枚举类的扩展 xff1a 枚举类型的值集合也受到限制 xff0c 但每个枚举常量仅作为单个实例存在 xff0c
  • 致年轻时如此拼搏的你我

    离别总是伤人意 这一篇文章写在这个时候是有其特殊意义和价值 xff0c 起码对我来说是这样的 这个时候正是一年一度的毕业季 xff0c 而我最敬重的师兄即将要离校实习 xff0c 很幸运的是师兄收到了很不错的 offer xff0c 在这里
  • ubuntu系统下,下载安装Python程序的方法汇总(wget;apt-get;easy_install;pip)

    1 源码安装 xff1a 已知源码的地址 xff0c 例如 xff1a https www python org ftp python 3 6 1 Python 3 6 1 tgz 这是Python3 6 1的源码地址 xff0c 则可以使
  • 【C语言刷LeetCode】qsort库函数,刷题利器

    之前刷过一些leetcode算法题 xff0c 挺痛苦的 xff0c 毕竟用的C语言 其中很大一部分题都是考察数组和字符串 刷题中得到一个经验 xff0c 遇见数组先考虑排序 xff0c 排序就选qsort 那现在就总结写qsort的几个不
  • 一文讲解ARM、STM32之间的关系以及STM单片机介绍

    一 什么是ARM ARM xff1a xff08 Advanced RISC Machines xff09 高级精简指令集微处理器 它有几层含义 xff1a 1 ARM是一个公司 xff0c 英国公司 只出售芯片的技术授权 2 ARM是全球
  • ESP8266串口WiFi模块基本使用方法和配置教程

    前言 ESP8266是一款超低功耗的UART WiFi 透传模块 拥有业内极富竞争力的封装尺寸和超低能耗技术 专为移动设备和物联网应用设计 可将用户的物理设备连接到Wi Fi 无线网络上 进行互联网或局域网通信 实现联网功能 由于本人一直从
  • linux 内存查看方法:meminfo\maps\smaps\status 文件解析

    linux 下面查看内存有多种渠道 xff0c 比如通过命令 ps top free 等 xff0c 比如通过 proc系统 xff0c 一般需要比较详细和精确地知道整机内存 某个进程内存的使用情况 xff0c 最好通过 proc 系统 x
  • 数值型模板参数

    本篇文章学习记录 xff1a 数值型模板参数 实现C 43 43 数组类模板 1 模板中的数值型参数 模板参数可以是数值型参数 也就是非类型参数 如下图所示 xff1a 我们可以像上面定义一个局部数组 xff0c 但是却不能这样定义 xff
  • 矩阵分解 (加法篇)

    转自简书 xff1a https www jianshu com p fc89d92bbc24 引言 分解的思想其实并不古老 xff0c 而且大家都熟悉的 xff0c 把复杂的分而治之 xff0c 然后再组合起来 分解有什么好处 xff1f
  • 矩阵分解 (乘法篇)

    引自简书 xff1a https www jianshu com p 0741789ffd06 引言 前面我们在矩阵分解 加法篇 里面分析的加法下的矩阵分解 这里我们来看看乘法下矩阵分解的要点 对角和三角矩阵 首先 xff0c 我们总结下