SLAM基础——常见矩阵以及矩阵分解_雨luo凡城的博客-程序员秘密

技术标签: 矩阵  SLAM从小白到大黑  

0 前言

本篇,多出自其他大佬的文章,厚着脸皮总结组织一下

1 矩阵求解

参考链接

https://blog.csdn.net/wangshuailpp/article/details/80209863

https://www.cnblogs.com/AndyJee/p/3846455.html

https://blog.csdn.net/wangshuailpp/article/details/80209863

https://www.cnblogs.com/AndyJee/p/3846455.html

1-1 内容一:直接给出 A X = B \bf{AX=B} AX=B解的情况。

(1)R(A)< r(A|B),方程组无解

(2)r(A)=r(A|B)=n,方程组有唯一解

(3)r(A)=r(A|B) < n,方程组有无穷解

(4)r(A)>r(A|B),这种情况不存在

其中r()代表矩阵的秩,A|B是增广矩阵,n是X未知数个数。

  • 当A满秩时,为了提高效率通常采用QR分解、LTLD分解、Cholesky分解和SVD分解(奇异分解)等。
  • 当A亏秩时,只能使用SVD分解方法,其他方法将失效

QR分解?LTLD分解、Cholesky分解、SVD分解?

1-2 内容二:线性最小二乘问题

min ⁡ ∥ A x − b ∥ 2 2 A ∈ R m ∗ n x ∈ R n b ∈ R m \min \|A x-b\|_{2}^{2} \\ A \in R^{m^{*} n} \quad x \in R^{n} \quad b \in R^{m} minAxb22ARmnxRnbRm

m个方程求解n个未知数,有三种情况:

  1. m = n \mathrm{m}=\mathrm{n} m=n 且A为非奇异, 则有唯一解, x = A − 1 b x=A^{-1} b x=A1b
  2. m > n m>n m>n, 约束的个数大于未知数的个数, 称为超定问题 (overdetermined)
  3. m < n \mathrm{m}<\mathrm{n} m<n, 负定/欠定问题 (underdetermined)

通常我们遇到的都是超定问题, 此时A = = = b的解是不存在的,从而转向解最小二乘问题: f ( x ) = ∥ A x − b ∥ f(x)=\|A x-b\| f(x)=Axb ,其中 f ( x ) \mathrm{f}(\mathrm{x}) f(x) 为凸函数。令一阶导数为 0, 得到: A T A x − A T b = 0 A^{T} A x-A^{T} b=0 ATAxATb=0,称之为正规方程

一般解: x = ( A T A ) − 1 A T b x=\left(A^{T} A\right)^{-1} A^{T} b x=(ATA)1ATb可见一般在视觉SLAM中后端优化就是约束项大于未知数的个数(超定问题), 采用最小二乘问题求 解

2 SLAM中常用的矩阵

2-1 正交矩阵

1.正交矩阵

矩阵和它的转置矩阵的乘积为单位矩阵,, 那么这个矩阵就是正交矩阵。李群中旋转矩阵就是一种正交阵,所以一般其逆的形式直接写成转置。
M T M = I ⟺ M T = M − 1 \mathbf{M}^{T} \mathbf{M}=\mathbf{I} \Longleftrightarrow \mathbf{M}^{T}=\mathbf{M}^{-1} MTM=IMT=M1

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

2-2 对角矩阵

乘以一个对角矩阵,好比对每个坐标轴进行缩放,包括方向,和压缩

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

在这里插入图片描述

2-3 三角矩阵

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

  • 上三角矩阵:上三角矩阵的作用好比进行右上的切变,水平的斜拉。
  • 下三角矩阵:同样是切边,不过是往左下切边,垂直方向的下拉

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2-4 总结

矩阵分解就是分解成上面三种形式,综上所述,矩阵分解的几何意义就是把一个线性变换分解开来,分别是缩放,切边和旋转。矩阵因子的作用就是要把缩放,切边和旋转分解出来理解一个矩阵的作用。

3 矩阵分解

  • 当A亏秩时,只能使用SVD分解方法,其他方法将失效
  • LDLT只针对对称矩阵

3-1 QR分解

QR分解介绍

当A是非奇异实方阵(满秩,只有方阵才存在奇异性,奇异矩阵秩亏,行列式为0,非奇异矩阵满秩,行列式不为0),实方阵A能够表示成一个正交矩阵Q(QTQ=I)与上三角矩阵R的积。

QR分解的实际计算有很多方法,例如 Givens 旋转、Householder 变换,以及 Gram-Schmidt正交化等等。A=Q*R称为A的QR分解。如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9CLN2s4t-1626795471111)(picture/20180505213806332)]

正交矩阵可以看成是坐标系的转换。从几何上QR分解,就是先进行旋转,然后再进行切变的过程

QR分解满秩最小二乘问题

A A A 有 QR 分解:
A = Q ( R 0 ) = Q 1 R A=Q\left(\begin{array}{l} R \\ 0 \end{array}\right)=Q_{1} R A=Q(R0)=Q1R
其中Q是正交矩阵, Q 1 \bf{Q_{1}} Q1 Q \bf {Q} Q的前n列组成的矩阵,R是对角线上元素均为正数的上三角矩阵。
由于正交矩阵保持范数不变, 所以等价于
∥ Q T ( A x − b ) ∥ 2 = min ⁡ { ∥ Q T ( A v − b ) ∥ 2 : v ∈ R n } \left\|Q^{T}(A x-b)\right\|_{2}=\min \left\{\left\|Q^{T}(A v-b)\right\|_{2}: v \in R^{n}\right\} QT(Axb)2=min{ QT(Avb)2:vRn}

d = Q T b = ( Q 1 T Q 2 τ ) b = ( d 1 d 2 ) \boldsymbol{d}=Q^{T} \boldsymbol{b}=\left(\begin{array}{l} Q_{1}^{T} \\ Q_{2}^{\tau} \end{array}\right) \\ \boldsymbol{b}=\left(\begin{array}{l} \boldsymbol{d}_{1} \\ \boldsymbol{d}_{2} \end{array}\right) d=QTb=(Q1TQ2τ)b=(d1d2)
则有
∥ Q T ( A x − b ) ∥ 2 2 = ∥ ( R 0 ) x − ( d 1 d 2 ) ∥ 2 2 = ∥ R x − d 1 ∥ 2 2 + ∥ d 2 ∥ \left\|Q^{T}(A x-b)\right\|_{2}^{2}=\left\|\left(\begin{array}{l} R \\ 0 \end{array}\right) x-\left(\begin{array}{l} d_{1} \\ d_{2} \end{array}\right)\right\|_{2}^{2}=\left\|R x-d_{1}\right\|_{2}^{2}+\left\|d_{2}\right\| QT(Axb)22=(R0)x(d1d2)22=Rxd122+d2
因此, x \boldsymbol{x} x 是当且仅当方程 R x = d 1 R \boldsymbol{x}=\boldsymbol{d}_{1} Rx=d1 的解。所以 解可由上三角方程组 R x = d 1 R \boldsymbol{x}=\boldsymbol{d}_{1} Rx=d1 求得。

QR 分解方法的基本步骤如下:

  • STEP 1: 求 A A A 的 QR 分解:
  • STEP 2: 计算 d 1 = Q 1 T b \boldsymbol{d}_{1}=Q_{1}^{T} \boldsymbol{b} d1=Q1Tb :
  • STEP 3: 解方程组 R x = d 1 R x=d_{1} Rx=d1

QR分解算力和稳定性分析

QR 分解方法比正规化方法有较好的数值稳定性, 并且计算结果比正规化方法要精确。

当然, Q R \mathrm{QR} QR 方法比正规化方法会付出更大的计算代价

3-2 LDLT分解

LDLT分解介绍

对称矩阵A可以分解成一个下三角矩阵L(Lower下)和一个对角矩阵D(Diagonal对角线)以及一个下三角矩阵L的转置LT三个矩阵相乘的形式。如下式
A = L D L T = ( 1 0 0 L 21 1 0 L 31 L 32 1 ) ( D 1 0 0 0 D 2 0 0 0 D 3 ) ( 1 L 21 L 31 0 1 L 32 0 0 1 ) \mathbf{A}=\mathbf{L D L}^{\mathrm{T}}=\left(\begin{array}{ccc} 1 & 0 & 0 \\ L_{21} & 1 & 0 \\ L_{31} & L_{32} & 1 \end{array}\right)\left(\begin{array}{ccc} D_{1} & 0 & 0 \\ 0 & D_{2} & 0 \\ 0 & 0 & D_{3} \end{array}\right)\left(\begin{array}{ccc} 1 & L_{21} & L_{31} \\ 0 & 1 & L_{32} \\ 0 & 0 & 1 \end{array}\right) A=LDLT=1L21L3101L32001D1000D2000D3100L2110L31L321

由A的分解可知 A T = A \bf A^{T}=A AT=A,即A的转置等于A矩阵本身。所以,此方法针对对称矩阵

LDLT分解解满秩最小二乘问题

一般无法得到满足对称矩阵A,因此需要使对ATA(满足对称)进行分解。将求解问题转换成下面的式子:
A T A x = A T b A^{T} A x=A^{T} b ATAx=ATb

由于 r ( A ) = n \mathrm{r}(\mathrm{A})=\mathrm{n} r(A)=n, 所以 A T A \bf{A^{T}A} ATA是对称(正定)矩阵, 式子有唯一解, 使用LDLT分解的步骤是:

  • STEP 1:定义矩阵 C = A T ⋆ A , d = A T ∗   b \mathrm{C}=\mathrm{AT}^{\star} \mathrm{A}, \mathrm{d}=\mathrm{AT}^{*} \mathrm{~b} C=ATA,d=AT b;
  • STEP 2:对C进行cholesky分解 C = L D L T \mathrm{C}=\mathrm{L} \mathrm{D} \mathrm{L^{T}} C=LDLT, 原式变成 L D L T x = d \mathrm{L} \mathrm{D} \mathrm{L^{T}} \mathrm{x}=\mathrm{d} LDLTx=d
  • STEP 3:令 y = L T x \mathrm{y}=\mathrm{L^{T}} \mathrm{x} y=LTx, 原式变成 L D y = d \mathrm{L} \mathrm{D} \mathrm{y}=\mathrm{d} LDy=d, 求解此方程得到y,然后求解 y = L T x \mathrm{y}=\mathrm{LTx} y=LTx得到 x   \mathrm{x}_{\text { }} x 

LDLT算力和稳定性分析

LDLT分解速度要快于QR分解。

3-3 Cholesky分解

Cholesky分解介绍

Cholesky分解是LDLT分解的一种特殊形式,也就是其中的D是单位矩阵。正定对称矩阵 A可以分解成一个下三角矩阵L和这个下三角矩阵L的转置LT相乘的形式。如下式
A = L L T = ( L 11 0 0 L 21 L 22 0 L 31 L 32 L 33 ) ( L 11 L 21 L 31 0 L 22 L 32 0 0 L 33 ) \mathbf{A}=\mathbf{L L}^{\mathbf{T}}=\left(\begin{array}{ccc} L_{11} & 0 & 0 \\ L_{21} & L_{22} & 0 \\ L_{31} & L_{32} & L_{33} \end{array}\right)\left(\begin{array}{ccc} L_{11} & L_{21} & L_{31} \\ 0 & L_{22} & L_{32} \\ 0 & 0 & L_{33} \end{array}\right) A=LLT=L11L21L310L22L3200L33L1100L21L220L31L32L33

Cholesky分解解满秩最小二乘问题

一般无法得到满足对称矩阵A,因此需要使对ATA(满足对称)进行分解。将求解问题转换成下面的式子:
A T A x = A T b A^{T} A x=A^{T} b ATAx=ATb

由于 r ( A ) = n \mathrm{r}(\mathrm{A})=\mathrm{n} r(A)=n, 所以 A T A \bf{A^{T}A} ATA是对称(正定)矩阵, 式子有唯一解, 使用LDLT分解的步骤是:

  • STEP 1:定义矩阵 C = A T ⋆ A , d = A T ∗   b \mathrm{C}=\mathrm{AT}^{\star} \mathrm{A}, \mathrm{d}=\mathrm{AT}^{*} \mathrm{~b} C=ATA,d=AT b;
  • STEP 2:对C进行cholesky分解 C = L L T \mathrm{C}=\mathrm{L} \mathrm{L^{T}} C=LLT, 原式变成 L L T x = d \mathrm{L} \mathrm{L^{T}} \mathrm{x}=\mathrm{d} LLTx=d
  • STEP 3:令 y = L T x \mathrm{y}=\mathrm{L^{T}} \mathrm{x} y=LTx, 原式变成 L y = d \mathrm{L} \mathrm{y}=\mathrm{d} Ly=d, 求解此方程得到y,然后求解 y = L T x \mathrm{y}=\mathrm{LTx} y=LTx得到 x   \mathrm{x}_{\text { }} x 

Cholesky算力和稳定性分析

Cholesky分解要快于LDLT分解。

3-4 SVD分解(略,看自己关于SVD分解的笔记)

SVD分解不仅可以解决满秩最小二乘问题,最重要的是可以解决亏秩最小二乘问题(r(A)< n,理解下其实就相当于这里取r < n的情况),而前面的方法在秩亏的时候都会失效。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jdy_lyy/article/details/118947171

智能推荐

RunTime面试题及答案_李发展的博客-程序员秘密

问题: objc在向一个对象发送消息时, 发生了什么?1.根据对象的isa指针找到类对象id, 在查询类对象里面的methodLists方法函数列表2.如果没有在好到, 在沿着superClass, 寻找父类,再在父类methodLists方法列表里面查询3.最终找到SEL, 根据id和SEL确认IMP(指针函数), 在发送消息.问题: 什么时候会报unrecognized selector错误?

细说python接口测试框架requests-郭宏志-视频专栏_多课网_老郭的博客-程序员秘密

细说python接口测试框架requests-郭宏志-视频专栏你将收获学习使用requests库进行基本接口测试学习使用requests库进行高级接口测试学习requests集成pytest测试框架requests库源码分析适用人群测试人员、测试开发人员、python开发人员课程介绍1、本人目前在从事测试开发工作,本课程来自于实际工作经验总结。2、课程全面、细致,对零基础童鞋和有一定经验的童鞋,都有学习价值。3、课程全程手写代码,跟着老师学习一遍,你一定收获多多。4、课程没有废话,纯

ogg pump 进程 Lag at Chkpt 时间延迟解决_lag at chkpt不断增长_落俗zp的博客-程序员秘密

上午遇见ogg数据同步不及时问题,查看抽取投递应用三进程状态正常,但是投递进程Lag at Chkpt(时间延迟)较大再比对查看抽取和投递进程的日志(均正常抽取投递),但抽取文件号到了7400多,但投递刚过7300,相差一百多队列文件没有投递再在目标端的dirdat查看,队列文件每半个小时才接收到一个,确定是pump进程投递投递过慢,文件出现延迟(但查看网络应该是正常的,不是网络IO问题)...

PermissionError: [WinError 5] 拒绝访问。: 'c:\\programdata\\anaconda3\\lib\\site-packages\\pip-18.0.dist-_NoOne-csdn的博客-程序员秘密

PermissionError: [WinError 5] 拒绝访问。: 'c:\\programdata\\anaconda3\\lib\\site-packages\\pip-18.0.dist-info\\entry_points.txt'    

关于cygwin出现用户问题_lanyou1900的博客-程序员秘密

Win跟换了用户登陆使用cywin报告如下错误:cygwin提示自己所在的组变成了”mkpaswd”, 这说明/etc/passwd或者/etc/group需要重建了。Your group is currently "mkgroup".  This indicates that neitheryour gid nor your pgsid (primary group associ

随便推点

《银翼杀手》画面布局赏析_John_NewBee的博客-程序员秘密

刚刚看完《银翼杀手》这一部经典的电影,很多人已经从剧情这方面给予了点评,本文尝试从画面布局去欣赏这一步难得的作品。

Android 布局优化—ViewStub的使用详解_viewsteb_安稳00的博客-程序员秘密

    本文将就ViewStub的优缺点及使用方法展开分析。如有错误欢迎批评指正,共同交流,共同进步。如果本篇文章对你有一点帮助,欢迎点赞。一、ViewStup是什么?        ViewStup是一个轻量级的view,之所以说它是轻量级的view是因为它在页面加载渲染的过程中不会去绘制,只是在你需要的时候再去绘制。二、viewStup的使用场景       只有在特定条件下才展示的布局,初始...

程序员的算法趣题Q16:3根绳子折成四边形_笨牛慢耕的博客-程序员秘密

0. 目录1..... 问题描述2..... 初始解法—解法12.1 三者互素的判断3..... 改进解法—解法24..... 改进解法—解法35..... 改进解法—解法46..... 测试结果1. 问题描述本题来自《程序员的算法趣题》中的第16题。假设分别将3根长度相同的绳子摆成3个四边形。其中2根摆成...

云端系统服务器是什么,云端服务器是什么-云端服务器介绍_朵儿来啦的博客-程序员秘密

云端服务器基于大规模分布式计算系统,该系统通过虚拟化技术集成IT资源,为各个行业提供互联网基础设施服务。亿人互联云服务器比传统服务器有许多优势。要了解中国云服务器品牌的状况,您可以看到哪个云服务器是好的。1.支持移动实时监控云服务器和独立服务器都支持远程监控和管理。但是,云服务器可以支持移动管理的使用,而独立服务器目前缺少移动管理,这需要手动手动管理资源和硬件。2.业务上线更快捷,更方便由于传统服...

python-pymysql连接Mysql数据库并进行简单的操作||增、删、改、查_pymysql删除数据库的命令_WolfOnTheWay的博客-程序员秘密

pymysql是oython连接mysql数据库进行操作的一个库,pymysql的详细介绍如下文:https://www.cnblogs.com/wt11/p/6141225.htmlimport pymysql# 连接数据库# 应提供主机名 端口号 用户名 密码 以及数据库名connect = pymysql.Connect(host='localhost',port=3306...

openSUSE+Windows10(VirutalBox)_没有昵称用了的博客-程序员秘密

更新一波瞎折腾系列,这次瞎折腾断断续续耗费了两天半,在Linux(openSUSE)系统上使用虚拟机virtualbox安装Windows(Windows10)系统。Linux下开虚拟机流畅度好的不是一点半点,极度顺滑,跟直接安装系统流畅度基本没区别,然而之前在Windows下虚拟机安装Linux就会出现很严重的卡顿现象。开虚拟机系统CPU占用特别高Linux对独立显卡几乎没有支持虚拟机安装W

推荐文章

热门文章

相关标签