视觉SLAM中的数学——解方程AX=b与矩阵分解:奇异值分解(SVD分解) 特征值分解 QR分解 三角分解 LLT分解

前言

本博客主要介绍在SLAM问题中常常出现的一些线性代数相关的知识,重点是如何采用矩阵分解的方法,求解线性方程组AX=B。主要参考了《计算机视觉——算法与应用》附录A以及Eigen库的方法。本博客可能不会对分解讲的特别深入,主要是想弄清楚各个分解的条件、分解结果以及应用(或特点)。

包括:
1、三角分解(LU分解)
2、LDLT分解与LLT分解(Cholesky分解)
3、QR分解
4、奇异值分解(SVD分解)
5、特征值分解

在矩阵分解之前

为什么要进行矩阵分解

1、矩阵分解可以在一定程度上降低存储空间,可以大大减少问题处理的计算量(如对一个矩阵进行求逆、求解方程组等),从而高效地解决目标问题。
2、矩阵分解可以提高算法的数值稳定性。

矩阵与矩阵分解的几何意义

在矩阵分解中,我们常常期望将矩阵分解成正交矩阵、对角矩阵以及上三角(下三角)矩阵的乘积。以三维矩阵为例,一个普通矩阵的几何意义是对坐标进行某种线性变换,而正交矩阵的几何意义是坐标的旋转,对角矩阵的几何意义是坐标的缩放,三角矩阵的几何意义是对坐标的切边。因此对矩阵分解的几何意义就是将这种变换分解成缩放、切边和旋转的过程。

常用矩阵分解

LU三角分解

三角分解又称为LU分解或LR分解,是将原正方(square)矩阵分解成一个上三角矩阵和一个下三角矩阵

A = L D U = L ( D U ) = ( L D ) U A = LDU = L(DU) = (LD)U A=LDU=L(DU)=(LD)U

其中L是单位下三角矩阵,D是对角矩阵,U是单位上三角矩阵。

三角分解的主要用途在于简化一个大矩阵行列式值计算过程,或求解方程组(即高斯消元法)等。

LDLT分解

为A为对称矩阵,且任意一K阶主子阵均不为0时,A有如下唯一的分解形式:
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 ) A = LDL^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

即L为下三角单位矩阵,D为对角矩阵。LDLT方法实际上是Cholesky分解法的改进(LLT分解需要开平方),用于求解线性方程组。

LLT分解(Cholesky分解)

LLT分解即矩阵的Cholesky分解,又被称为平方根分解,是LDLT分解的一种特殊形式,即其中的D为单位矩阵。
对称正定矩阵A可以分解成一个下三角矩阵L和L的转置LT相乘的形式:

A = L L T = R T R A = LL^T = R^T R A=LLT=RTR

其中的L是下三角矩阵,R是上三角矩阵。
(正定要求矩阵的所有特征值必须大于0,因此分解的下三角对角元也是大于0的)

LLT分解常用于求解最小二乘问题中的 A T A x = A T b A^TAx = A^Tb ATAx=ATb
C = A T A = R R C=A^TA=R^R C=ATA=RR,又有 d = A T b d=A^Tb d=ATb,
因子经过因子分解后,x可以通过解下面的方程获得,即只需求解两个三角系统,通过一系列前向和后向迭代运算。

R T z = d , R x = z R^Tz= d,Rx=z RTz=d,Rx=z

LLT分解的总操作数为 O ( N 2 ) O(N^2) O(N2),对于系数矩阵来说操作数会大大降低。

QR分解

如果A是mxn实(复)矩阵,且其n个列线性无关,则A有分解:
A = Q R A=QR A=QR

其中Q是正交矩阵(或酉矩阵) Q Q T = 1 QQ^T =1 QQT=1,R是上三角矩阵

QR分解有三种常用方法:Givens 变换、Householder 变换,以及 Gram-Schmidt正交化。

QR分解是一项广泛用于稳定求解病态最小二乘问题的方法,也是一些更复杂算法的矩阵,如计算SVD及特征值分解。在计算机视觉中,QR分解可以用于将相机矩阵转换为一个旋转矩阵和一个上三角的标定矩阵。

奇异值分解

设A是一个mxn的矩阵,则存在一个分解的m阶正交矩阵U、非负对角阵Σ和n阶正交矩阵V:
A = U D V T = U [ Σ 0 0 0 ] V T A=U D V^{\mathrm{T}}=U\left[\begin{array}{cc}{\Sigma} & {0} \\ {0} & {0}\end{array}\right] V^{\mathrm{T}} A=UDVT=U[Σ000]VT

其中 Σ = d i a g ( σ 1 , σ 2 , . . . , σ r ) Σ=diag(\sigma_1,\sigma_2,...,\sigma_r) Σ=diag(σ1,σ2,...,σr) σ \sigma σ为矩阵A的全部非零奇异值,且一般我们会将Σ的值从大到小排序。奇异值分解的一个重要性质是:在实际大多数情况中,奇异值 σ \sigma σ减小的速度特别快,因此可以使用前r个奇异值来对矩阵做近似(即丢弃U和V的后几列),将获得原始矩阵A在最小二乘意义下的最佳逼近。

矩阵的奇异值分解通常是不唯一的。

SVD分解在最优化问题、特征值问题、最小二乘问题(尤其是亏秩最小二乘问题)等具有巨大的作用。

SVD分解的几何意义可以通过公式的重写获得:
A V = U Σ 或 A v j = σ j u j AV = UΣ 或 Av_j = \sigma_j u_j AV=UΣAvj=σjuj

即当矩阵A作用于任何基向量 v j v_j vj时,会把 v j v_j vj变换到 u j u_j uj的方向,同时将 u j u_j uj的长度变成 σ j \sigma_j σj。也可以看成先旋转然后缩放再旋转的过程。

特征值分解

如果A是一个NxN的方阵,且有N个线性无关的特征向量,则可以被写成特征值分解的形式:
A = U Λ U T A=UΛU^T A=UΛUT

其中Q为NxN方阵,且第i列为A的特征向量,Λ为对角矩阵,其对角线上的元素为对应的特征值。注意只有可对角化矩阵才能作特征值分解。

特征值分解可用于求解矩阵的逆:
A − 1 = U Λ − 1 U T A^{-1}=UΛ^{-1}U^T A1=UΛ1UT

在数据统计分析中常常出现A为半正定矩阵,其表示数据点的协方差,此时特征值分解就是通常所说的主分量分析(PCA),因为它完成了对数据点分布在其中心周围变化的主方向和幅度的建模。

在求解最小二乘问题时,常常通过一系列外积之和构造对称矩阵C,此时C也是半正定的:
C = ∑ i a i a i T = A A T C=\sum_i {a_ia_i^T} = AA^T C=iaiaiT=AAT

此时C的特征值和特征向量与A的奇异值和奇异向量:
A = U D V T A=U D V^T A=UDVT

C = A A T = U D V T V D T U T = U Λ U T C = AA^T = U D V^T V D^T U^T=UΛU^T C=AAT=UDVTVDTUT=UΛUT

由此我们可以得到特征值 λ i = σ i 2 \lambda_i = \sigma_i^2 λi=σi2

你可能感兴趣的:(视觉SLAM)