1. 参考
https://eigen.tuxfamily.org/dox/group__TutorialLinearAlgebra.html
2. 问题来源
- 在解决平面拟合、直线拟合等问题时,我们经常会利用多维空间中的多个点来构建超定方程 A x = b \mathbf{Ax=b} Ax=b,然后利用最小二乘法求解该方程组来获得待拟合对象的参数。
- 在基于优化的slam框架中,我们经常会构建类似于 ∑ i = 1 n ∣ ∥ f ( x , l i ) ∥ 2 2 \sum_{i=1}^{n}\left|\| f(\mathbf{x},l_{i}) \right\|_{2}^{2} ∑i=1n∣∥f(x,li)∥22 残差方程,然后通过最小化该残差方程结果来获得最优的状态 x \mathbf{x} x,但由于该方程是个非线性方程,需要通过迭代法来求解,求解过程中最重要的步骤就是通过求解 J T J Δ x = − J T f J^{T}J\Delta x=-J^{T}f JTJΔx=−JTf 方程来获得迭代增量。可见该方程也是形如 A x = b \mathbf{Ax=b} Ax=b 。
3. 求解方法对比
结论:1. 从速度上来看,Cholesky分解方法速度是最快的,并且精度较好,但其要求矩阵A是对称正定的;2. 精度最好最稳定的是SVD分解法,但求解速度慢;3. LU分解和QR分解速度和精确性居中,但其要求矩阵A是满秩的。 因此基于上面的结论我们可以找到第2节两个问题的较合理的求解方法,对于问题1这种拟合问题,由于矩阵A是非满秩的,因此只有SVD分解方法可用,对于问题2,由于其矩阵
A
=
J
T
J
A=J^{T}J
A=JTJ是个对称正定阵,因此可考虑使用求解速度最快的LDLT方法。
注: 上述结论中的“要求”都是基于对应的分解方法原理来说的,可通过下面原理部分了解。
4. 原理
4.1 LU分解
LU分解也称为三角分解,将线性方程组的系数矩阵分解成一个上三角和一个下三角矩阵,形如
A
=
L
U
A=LU
A=LU。
具体分析见参考: https://zhuanlan.zhihu.com/p/54943042
4.2 QR分解
任意一个满秩矩阵A,都可以唯一的分解成
A
=
Q
R
A = QR
A=QR 的形式,其中Q为正交矩阵,R是具有正对角元的上三角矩阵。
具体分析见参考: https://zhuanlan.zhihu.com/p/84415000
4.3 Choesky分解
Cholesky 分解是把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解,形如
A
=
L
L
T
A=LL^{T}
A=LLT。
具体分析见参考: https://zhuanlan.zhihu.com/p/112091443
4.4 SVD分解
SVD分解是将矩阵分解成
A
=
U
Σ
V
T
A=U\Sigma V^{T}
A=UΣVT,其中
U
U
U是一个
m
×
m
m\times m
m×m的矩阵,
Σ
\Sigma
Σ 是一个
m
×
n
m\times n
m×n 的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,
V
V
V 是一个
n
×
n
n\times n
n×n 的矩阵。
U
U
U和
V
V
V 都是正交矩阵。
具体分析见参考: https://zhuanlan.zhihu.com/p/29846048