F
(
x
)
=
∑
⟨
i
,
j
⟩
∈
C
e
(
x
i
,
x
j
,
z
i
j
)
⊤
Ω
i
j
e
(
x
i
,
x
j
,
z
i
j
)
⏟
F
i
j
\mathbf{F}(\mathbf{x})=\sum_{\langle i, j\rangle \in \mathcal{C}} \underbrace{\mathbf{e}\left(\mathbf{x}_{i}, \mathbf{x}_{j}, \mathbf{z}_{i j}\right)^{\top} \boldsymbol{\Omega}_{i j} \mathbf{e}\left(\mathbf{x}_{i}, \mathbf{x}_{j}, \mathbf{z}_{i j}\right)}_{\mathbf{F}_{i j}}
F(x)=⟨i,j⟩∈C∑Fije(xi,xj,zij)⊤Ωije(xi,xj,zij)
x
∗
=
argmin
x
F
(
x
)
.
\mathbf{x}^{*}=\underset{\mathbf{x}}{\operatorname{argmin}} \mathbf{F}(\mathbf{x}) .
x∗=xargminF(x).
(
x
1
T
,
⋯
,
x
n
T
)
T
\mathbf{(x_1^T, \cdots ,x_n^T)^T}
(x1T,⋯,xnT)T:参数向量,
x
i
\mathbf{x}_i
xi:表示一个一般的参数块
z
i
j
\mathbf{z}_{ij}
zij和
Ω
i
j
\Omega_{ij}
Ωij:分别表示与参数相关约束的均值和信息矩阵
e
(
x
i
,
x
j
,
z
i
j
)
\mathbf{e}\left(\mathbf{x}_{i}, \mathbf{x}_{j}, \mathbf{z}_{i j}\right)
e(xi,xj,zij) :向量误差函数,度量参数块
x
i
\mathbf{x}_i
xi和
x
j
\mathbf{x}_j
xj 满足约束
z
i
j
\mathbf{z}_{ij}
zij 的程度,完全满足约束条件时为
0
\mathbf 0
0
简单起见:
e
(
x
i
,
x
j
,
z
i
j
)
=
def.
e
i
j
(
x
i
,
x
j
)
=
def.
e
i
j
(
x
)
.
\mathbf{e}\left(\mathbf{x}_{i}, \mathbf{x}_{j}, \mathbf{z}_{i j}\right) \stackrel{\text { def. }}{=} \mathbf{e}_{i j}\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right) \stackrel{\text { def. }}{=} \mathbf{e}_{i j}(\mathbf{x}).
e(xi,xj,zij)= def. eij(xi,xj)= def. eij(x).
如果已知参数
X
˘
\breve{\mathbf{X}}
X˘ 有一个良好的猜测值,可以用(2) 使用G-N或L-M算法求数值解,思想:用当前状态猜测值
X
˘
\breve{\mathbf{X}}
X˘ 附近的一阶泰勒展开近似误差函数。
e
i
j
(
x
˘
i
+
Δ
x
i
,
x
˘
j
+
Δ
x
j
)
=
e
i
j
(
x
˘
+
Δ
x
)
\mathbf{e}_{i j}\left(\breve{\mathbf{x}}_{i}+\boldsymbol{\Delta} \mathbf{x}_{i}, \breve{\mathbf{x}}_{j}+\boldsymbol{\Delta} \mathbf{x}_{j}\right)=\mathbf{e}_{i j}(\breve{\mathbf{x}}+\boldsymbol{\Delta} \mathbf{x})
eij(x˘i+Δxi,x˘j+Δxj)=eij(x˘+Δx)
≃
e
i
j
+
J
i
j
Δ
x
.
\quad \qquad \qquad \qquad \qquad \qquad \simeq \mathbf{e}_{i j}+\mathbf{J}_{i j} \Delta \mathbf{x}.
≃eij+JijΔx.
J
i
j
\mathbf{J}_{ij}
Jij 是在
X
˘
\breve{\mathbf{X}}
X˘ 和
e
i
j
=
def.
e
i
j
(
X
˘
)
\mathbf{e}_{i j} \stackrel{\text { def. }}{=}\mathbf{e}_{i j}(\breve{\mathbf{X}})
eij= def. eij(X˘) 处的雅克比,将(5) 带入(1)中
F
i
j
\mathbf{F}_{ij}
Fij的误差项中得到:
F
i
j
(
x
˘
+
Δ
x
)
=
e
i
j
(
x
˘
+
Δ
x
)
⊤
Ω
i
j
e
i
j
(
x
˘
+
Δ
x
)
≃
(
e
i
j
+
J
i
j
Δ
x
)
⊤
Ω
i
j
(
e
i
j
+
J
i
j
Δ
x
)
=
e
i
j
⊤
Ω
i
j
e
i
j
⏟
c
i
j
+
2
e
i
j
⊤
Ω
i
j
J
i
j
⏟
b
i
j
Δ
x
+
Δ
x
⊤
J
i
j
⊤
Ω
i
j
J
i
j
⏟
H
i
j
Δ
x
(
9
)
=
c
i
j
+
2
b
i
j
Δ
x
+
Δ
x
⊤
H
i
j
Δ
x
\begin{aligned} \mathbf{F}_{i j} &(\breve{\mathbf{x}}+\boldsymbol{\Delta} \mathbf{x}) \\ &=\mathbf{e}_{i j}(\breve{\mathbf{x}}+\boldsymbol{\Delta} \mathbf{x})^{\top} \boldsymbol{\Omega}_{i j} \mathbf{e}_{i j}(\breve{\mathbf{x}}+\boldsymbol{\Delta} \mathbf{x}) \\ & \simeq\left(\mathbf{e}_{i j}+\mathbf{J}_{i j} \boldsymbol{\Delta} \mathbf{x}\right)^{\top} \boldsymbol{\Omega}_{i j}\left(\mathbf{e}_{i j}+\mathbf{J}_{i j} \boldsymbol{\Delta} \mathbf{x}\right) \\ &=\underbrace{\mathbf{e}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{e}_{i j}}_{c_{i j}}+2 \underbrace{\mathbf{e}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{J}_{i j}}_{\mathbf{b}_{i j}} \boldsymbol{\Delta} \mathbf{x}+\Delta \mathbf{x}^{\top} \underbrace{\mathbf{J}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{J}_{i j}}_{\mathbf{H}_{i j}} \boldsymbol{\Delta} \mathbf{x}(9) \\ &=\mathrm{c}_{i j}+2 \mathbf{b}_{i j} \boldsymbol{\Delta} \mathbf{x}+\boldsymbol{\Delta} \mathbf{x}^{\top} \mathbf{H}_{i j} \boldsymbol{\Delta} \mathbf{x} \end{aligned}
Fij(x˘+Δx)=eij(x˘+Δx)⊤Ωijeij(x˘+Δx)≃(eij+JijΔx)⊤Ωij(eij+JijΔx)=cijeij⊤Ωijeij+2bijeij⊤ΩijJijΔx+Δx⊤HijJij⊤ΩijJijΔx(9)=cij+2bijΔx+Δx⊤HijΔx
有了这个局部近似后,重写(1)中的函数
F
(
x
)
\mathbf{F(x)}
F(x):
F
(
x
˘
+
Δ
x
)
=
∑
⟨
i
,
j
⟩
∈
C
F
i
j
(
x
˘
+
Δ
x
)
≃
∑
⟨
i
,
j
⟩
∈
C
c
i
j
+
2
b
i
j
Δ
x
+
Δ
x
⊤
H
i
j
Δ
x
(
12
)
=
c
+
2
b
⊤
Δ
x
+
Δ
x
⊤
H
Δ
x
.
\begin{aligned} \mathbf{F}(\breve{\mathbf{x}}+\boldsymbol{\Delta} \mathbf{x}) &=\sum_{\langle i, j\rangle \in \mathcal{C}} \mathbf{F}_{i j}(\breve{\mathbf{x}}+\boldsymbol{\Delta} \mathbf{x}) \\ & \simeq \sum_{\langle i, j\rangle \in \mathcal{C}} c_{i j}+2 \mathbf{b}_{i j} \boldsymbol{\Delta} \mathbf{x}+\Delta \mathbf{x}^{\top} \mathbf{H}_{i j} \boldsymbol{\Delta} \mathbf{x}(12) \\ &=\mathrm{c}+2 \mathbf{b}^{\top} \boldsymbol{\Delta} \mathbf{x}+\boldsymbol{\Delta} \mathbf{x}^{\top} \mathbf{H} \boldsymbol{\Delta} \mathbf{x}. \end{aligned}
F(x˘+Δx)=⟨i,j⟩∈C∑Fij(x˘+Δx)≃⟨i,j⟩∈C∑cij+2bijΔx+Δx⊤HijΔx(12)=c+2b⊤Δx+Δx⊤HΔx.
c
=
∑
c
i
j
,
b
=
∑
b
i
j
,
H
=
∑
H
i
j
.
c = \sum c_{ij}, \ \mathbf{b} = \sum{\mathbf{b}_{ij}}, \ \mathbf{H} = \sum\mathbf{H}_{ij}.
c=∑cij,b=∑bij,H=∑Hij.
通过求解线性方程组来最小化
Δ
x
\Delta \mathbf{x}
Δx :
H
Δ
x
∗
=
−
b
.
\mathbf{H} \Delta \mathbf{x}^{*}=-\mathbf{b}.
HΔx∗=−b.
H
\mathbf{H}
H是系统的信息矩阵,解为初始猜想加上增量
Δ
x
∗
\Delta \mathbf{x}^{*}
Δx∗
x
∗
=
x
˘
+
Δ
x
∗
.
\mathbf{x}^{*}=\breve{\mathbf{x}}+\Delta \mathbf{x}^{*}.
x∗=x˘+Δx∗.
L-M算法:
(
H
+
λ
I
)
Δ
x
∗
=
−
b
.
(\mathbf{H}+\lambda \mathbf{I}) \boldsymbol{\Delta} \mathbf{x}^{*}=-\mathbf{b}.
(H+λI)Δx∗=−b.
B. 可选参数化
上面的问题假设参数
x
\mathbf{x}
x处于欧几里得空间上,对于SLAM或BA等问题并不适用。
为了处理非欧空间上的状态变量,常见方法是在一个不同于参数
x
i
\mathbf{x}_i
xi 的空间中表示增量
Δ
x
\Delta \mathbf{x}
Δx
SLAM 中每个参数块
x
i
=
{
t
i
,
α
i
}
\mathbf{x}_i = \{t_i, \alpha_i \}
xi={ti,αi} ,
t
i
t_i
ti 为欧式空间中表示平移的向量,
α
i
\alpha_i
αi 为2D或3D旋转群
S
O
(
2
)
或
S
O
(
3
)
SO(2)或SO(3)
SO(2)或SO(3) 张成的非欧空间。
另一个方法就是计算一种新的误差函数(扰动模型),
Δ
x
i
\boldsymbol{\Delta} \mathbf{x}_{i}
Δxi 是当前状态变量
X
˘
\breve{\mathbf{X}}
X˘ 周围的一个扰动,表示一个细小的旋转,
x
i
\mathbf{x}_i
xi 使用过参数化的表示。优化后的变量
x
∗
\mathbf{x^*}
x∗ 通过非线性运算符
⊞
\boxplus
⊞ 的增量求得:
x
i
∗
=
x
˘
i
⊞
Δ
x
i
∗
.
\mathbf{x}_{i}^{*}=\breve{\mathbf{x}}_{i} \boxplus \boldsymbol{\Delta} \mathbf{x}_{i}^{*}.
xi∗=x˘i⊞Δxi∗.
在三维SLAM中可用平移向量和归一化四元数的轴来表示增量
Δ
x
i
\boldsymbol{\Delta} \mathbf{x}_{i}
Δxi ,位姿
x
i
\mathbf{x}_i
xi 可用旋转向量和完整四元数表示。在将增量转换为与状态变量相同的表示之后,操作符
⊞
\boxplus
⊞ 通过使用标准运动组合操作符
⊕
\oplus
⊕ 将增量
Δ
x
i
\boldsymbol{\Delta} \mathbf{x}_{i}
Δxi 应用到
x
i
\mathbf{x}_i
xi .
x
˘
i
⊞
Δ
x
i
∗
=
def.
x
˘
i
⊕
Δ
x
i
∗
.
\breve{\mathbf{x}}_{i} \boxplus \boldsymbol{\Delta} \mathbf{x}_{i}^{*} \stackrel{\text { def. }}{=} \quad \breve{\mathbf{x}}_{i} \oplus \mathbf{\Delta} \mathbf{x}_{i}^{*}.
x˘i⊞Δxi∗= def. x˘i⊕Δxi∗.
定义一个新的误差函数:
e
i
j
(
Δ
x
i
,
Δ
x
j
)
=
def.
e
i
j
(
x
˘
i
⊞
Δ
x
i
,
x
˘
j
⊞
Δ
x
j
)
=
e
i
j
(
x
˘
⊞
Δ
x
)
≃
e
i
j
+
J
i
j
Δ
x
.
\begin{aligned} \mathbf{e}_{i j}\left(\boldsymbol{\Delta} \mathbf{x}_{i}, \boldsymbol{\Delta} \mathbf{x}_{j}\right) \stackrel{\text { def. }}{=} & \mathbf{e}_{i j}\left(\breve{\mathbf{x}}_{i} \boxplus \boldsymbol{\Delta} \mathbf{x}_{i}, \breve{\mathbf{x}}_{j} \boxplus \boldsymbol{\Delta} \mathbf{x}_{j}\right) \\ =&\mathbf{e}_{i j}(\breve{\mathbf{x}} \boxplus \boldsymbol{\Delta} \mathbf{x}) \simeq \mathbf{e}_{i j}+\mathbf{J}_{i j} \boldsymbol{\Delta} \mathbf{x}. \end{aligned}
eij(Δxi,Δxj)= def. =eij(x˘i⊞Δxi,x˘j⊞Δxj)eij(x˘⊞Δx)≃eij+JijΔx.
X
˘
\breve{\mathbf{X}}
X˘ 张成原始的过参数化空间,雅克比
J
i
j
\mathbf{J}_{ij}
Jij等于:
J
i
j
=
∂
e
i
j
(
x
˘
⊞
Δ
x
)
∂
Δ
x
∣
Δ
x
=
0
.
\mathbf{J}_{i j}=\left.\frac{\partial \mathbf{e}_{i j}(\breve{\mathbf{x}} \boxplus \boldsymbol{\Delta} \mathbf{x})}{\partial \boldsymbol{\Delta} \mathbf{x}}\right|_{\Delta \mathbf{x}=\mathbf{0}}.
Jij=∂Δx∂eij(x˘⊞Δx)∣∣∣∣Δx=0.
增量
Δ
x
~
∗
\Delta \tilde{\mathrm{x}}^{*}
Δx~∗ 是在初始猜想
X
˘
\breve{\mathbf{X}}
X˘ 的局部欧式空间中计算,故需要由
⊞
\boxplus
⊞ 算子重新映射到冗余空间中。
g2o框架允许为增量和状态变量定义不同的空间,支持同一个问题中任意参数。无论参数化的选择如何,Hessian 矩阵
H
\mathbf{H}
H 的结构一般是不变的。
线性系统结构
根据公式(13),
H
\mathbf{H}
H矩阵和向量
b
\mathbf{b}
b由一组矩阵和向量求和得到,对每个约束,设
b
i
j
=
J
i
j
⊤
Ω
i
j
e
i
j
\mathbf{b}_{i j}=\mathbf{J}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{e}_{i j}
bij=Jij⊤Ωijeij 和
H
i
j
=
J
i
j
⊤
Ω
i
j
J
i
j
\mathbf{H}_{i j}=\mathbf{J}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{J}_{i j}
Hij=Jij⊤ΩijJij (公式9中也有这样的表达),然后重写
b
\mathbf{b}
b和
H
\mathbf{H}
H:
b
=
∑
⟨
i
,
j
⟩
∈
C
b
i
j
H
=
∑
⟨
i
,
j
⟩
∈
C
H
i
j
.
\mathbf{b}=\sum_{\langle i, j\rangle \in \mathcal{C}} \mathbf{b}_{i j} \quad \mathbf{H}=\sum_{\langle i, j\rangle \in \mathcal{C}} \mathbf{H}_{i j}.
b=⟨i,j⟩∈C∑bijH=⟨i,j⟩∈C∑Hij.
J
i
j
=
(
0
⋯
0
A
i
j
⏟
i
0
⋯
0
B
i
j
⏟
j
0
⋯
0
)
.
\mathbf{J}_{i j}=(\mathbf{0} \cdots \mathbf{0}\ \underbrace{\mathbf{A}_{i j}}_{i}\ \mathbf{0} \cdots \mathbf{0}\ \underbrace{\mathbf{B}_{i j}}_{j} \ \mathbf{0} \cdots \mathbf{0}).
Jij=(0⋯0iAij0⋯0jBij0⋯0).
A
i
j
\mathbf{A}_{ij}
Aij和
B
i
j
\mathbf{B}_{ij}
Bij分别是误差函数对
Δ
x
i
\boldsymbol{\Delta} \mathbf{x}_{i}
Δxi 和
Δ
x
j
\boldsymbol{\Delta} \mathbf{x}_{j}
Δxj 的导数,由(9)得到下边的
H
i
j
\mathbf{H}_{ij}
Hij矩阵块结构:
H
i
j
=
(
⋱
A
i
j
⊤
Ω
i
j
A
i
j
⋯
A
i
j
⊤
Ω
i
j
B
i
j
⋮
⋮
B
i
j
⊤
Ω
i
j
A
i
j
⋯
B
i
j
⊤
Ω
i
j
B
i
j
⋱
)
b
i
j
=
(
⋮
A
i
j
⊤
Ω
i
j
e
i
j
⋮
B
i
j
⊤
Ω
i
j
e
i
j
⋮
)
.
\mathbf{H}_{i j}=\left(\begin{array}{cccc} \ddots & & & \\ \mathbf{A}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{A}_{i j} & \cdots & \mathbf{A}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{B}_{i j} \\ \vdots & & \vdots \\ \mathbf{B}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{A}_{i j} & \cdots & \mathbf{B}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{B}_{i j} \\ & & & \ddots \end{array}\right) \qquad \mathbf{b}_{ij}= \left(\begin{array}{c} \vdots \\ \mathbf{A}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{e}_{i j} \\ \vdots \\ \mathbf{B}_{i j}^{\top} \boldsymbol{\Omega}_{i j} \mathbf{e}_{i j} \\ \vdots \end{array}\right).
Hij=⎝⎜⎜⎜⎜⎜⎛⋱Aij⊤ΩijAij⋮Bij⊤ΩijAij⋯⋯Aij⊤ΩijBij⋮Bij⊤ΩijBij⋱⎠⎟⎟⎟⎟⎟⎞bij=⎝⎜⎜⎜⎜⎜⎜⎜⎛⋮Aij⊤Ωijeij⋮Bij⊤Ωijeij⋮⎠⎟⎟⎟⎟⎟⎟⎟⎞.
注:
Ω
i
j
\boldsymbol{\Omega}_{i j}
Ωij是高维空间上的流型吗?在这里当作一个常数来处理.本质为信息矩阵(有确定的望告知)
为简单表示,省略了0块,
H
\mathbf{H}
H矩阵的块结构是图的邻接矩阵(存放边的数据) ,因此它的非零块的数量与图中的边的数量成正比,通常会得到稀疏的
H
\mathbf{H}
H矩阵。在g2o中利用
H
\mathbf{H}
H的这一特性,采用最先进的方法求解(14)的线性系统。
特殊结构系统
某些问题(如BA) 中会导致
H
\mathbf{H}
H矩阵具有某些特殊结构,本系统可以利用这些特殊结构来提高性能。在BA中一般由两种变量:相机的位姿P和相机观测到的地标点的位姿 I ,通过对(14)中的变量重新排序,得到下列系统:
(
H
p
p
H
p
l
H
p
l
⊤
H
l
l
)
(
Δ
x
p
∗
Δ
x
l
∗
)
=
(
−
b
p
−
b
l
)
\left(\begin{array}{cc} \mathbf{H}_{\mathrm{pp}} & \mathbf{H}_{\mathrm{pl}} \\ \mathbf{H}_{\mathrm{pl}}^{\top} & \mathbf{H}_{\mathrm{ll}} \end{array}\right)\left(\begin{array}{l} \Delta \mathbf{x}_{\mathrm{p}}^{*} \\ \Delta \mathbf{x}_{\mathbf{l}}^{*} \end{array}\right)=\left(\begin{array}{l} -\mathbf{b}_{\mathrm{p}} \\ -\mathbf{b}_{\mathbf{l}} \end{array}\right)
(HppHpl⊤HplHll)(Δxp∗Δxl∗)=(−bp−bl)
通过取
H
\mathbf{H}
H矩阵的Schur补得到一个等价的约化系统 [7]
(
H
p
p
−
H
p
l
H
l
l
−
1
H
p
l
⊤
)
Δ
x
p
∗
=
−
b
p
+
H
p
l
H
1
l
−
1
b
l
.
\left(\mathbf{H}_{\mathrm{pp}}-\mathbf{H}_{\mathrm{pl}} \mathbf{H}_{\mathrm{ll}}^{-1} \mathbf{H}_{\mathrm{pl}}^{\top}\right) \Delta \mathrm{x}_{\mathrm{p}}^{*}=-\mathbf{b}_{\mathrm{p}}+\mathbf{H}_{\mathrm{pl}} \mathbf{H}_{1 l}^{-1} \mathbf{b}_{\mathbf{l}}.
(Hpp−HplHll−1Hpl⊤)Δxp∗=−bp+HplH1l−1bl.
H
11
\mathbf{H}_{11}
H11是一个块对角阵,
H
11
−
1
\mathbf{H}_{11}^{-1}
H11−1很好求解,求解(25) 我们可以得到相机的增量
Δ
x
p
∗
\Delta \mathrm{x}_{\mathrm{p}}^{*}
Δxp∗ ,然后利用这个来解
H
11
Δ
x
l
∗
=
−
b
l
−
H
p
l
⊤
Δ
x
p
∗
\mathbf{H}_{11} \Delta \mathbf{x}_{\mathbf{l}}^{*}=-\mathbf{b}_{\mathbf{l}}-\mathbf{H}_{\mathbf{p l}}^{\top} \boldsymbol{\Delta} \mathbf{x}_{\mathbf{p}}^{*}
H11Δxl∗=−bl−Hpl⊤Δxp∗
连接两个顶点
x
i
\mathbf{x}_i
xi 和
x
j
\mathbf{x}_j
xj 的边需要定义误差函数
e
i
j
(
⋅
)
\mathbf{e}_{ij}(\cdot)
eij(⋅). 用数值计算雅克比矩阵
J
i
j
\mathbf{J}_{ij}
Jij ,或者用户可以通过重写虚基类显示地指定
J
i
j
\mathbf{J}_{ij}
Jij ,因此只需要编写几行代码就可以实现解决新优化问题或比较不同参数化的新类型。
H
\mathbf{H}
H矩阵的计算可以使用动态尺寸矩阵(一般情况下),也可使用固定尺寸的矩阵(已知变量
x
i
\mathbf{x}_{i}
xi的维度)。利用已知的先验维度可以实现编译时的优化,如展开循环来执行矩阵乘法。
在实现(25)中舒尔补简化所需的矩阵乘法时,利用底层图的稀疏结构,只有乘非零项才会形成额外的
H
P
P
\mathbf{H}_{PP}
HPP矩阵。对底层矩阵块结构进行操作,相比于标量矩阵乘法更加高效的矩阵乘法。
该框架时未知的嵌入式线性求解器,可适用于不同问题。
实验中作者使用了两个求解器
1、由于
H
\mathbf{H}
H是半正定对称矩阵,稀疏Cholesky分解得到了一个有效的求解器。最小二乘迭代期间的非零模式是恒定的,因此能够复用第一次迭代中计算的符号分解,从而减少填充,并减少后继迭代中的总体计算时间。
注意:这种Cholesky分解没有利用参数的块结构。
2、第二种方法是带有块Jacobi预调节器的预条件共轭梯度(PCG),由于PCG本身就是一种迭代方法,求解一个
n
×
n
n\times n
n×n矩阵的线性系统需要
n
n
n 次迭代,使用PCG进行
n
n
n次迭代通常比Cholesky分解慢,所以基于PCG平方残差的相对减少来限制迭代次数。