机器人和计算机视觉中的许多问题都可以用下列方程的最小化来求解
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∑Fij e(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).
注意:每一个误差函数,每一个参数块,每一个误差函数都能张成不同的空间。在这种形式下,一个问题能用一个图来高效地表示。
节点 i i i 表示参数块 x i \mathbf{x}_i xi ,节点 i i i 和节点 j j j 之间的边表示两个参数块 x j 和 x i \mathbf{x}_j和\mathbf{x}_i xj和xi 之间的有序约束。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ciloICLW-1648560327983)(g2o_a_general_framework_for_graph_optimaization.assets/image-20220328163210512.png)]
A. 最小二乘优化
如果已知参数 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)=cij eij⊤Ωijeij+2bij eij⊤ΩijJijΔx+Δx⊤Hij Jij⊤Ω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.
通过求解线性方程组来最小化 Δ 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) 张成的非欧空间。
为避免奇异点,这些空间通常采用过参数化的描述,如旋转矩阵或四元数。
直接将公式(15) 应用到过参数化的表示会破坏由过参数化引起的约束,可以用最小化的旋转表示(如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.
每个约束都对系统有一个附加值的贡献,该值只取决于误差函数的雅克比,由于约束的误差函数只依赖两个节点的值,公式(5) 的雅克比有如下形式:
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⋯0 i Aij 0⋯0 j Bij 0⋯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 1 ∗ \Delta \mathrm{x}_{\mathrm{1}}^{*} Δx1∗ 来调整观测到的世界特征。通常,世界特征的数量大于相机位姿数量,因此用(25) 的求解速度要快于(14). 尽管(25) 需要计算左边的矩阵需要额外的时间。
通过实现途中顶点和边的抽象基类来实现目标,连个基类都提供了一组方便子类化的虚函数,大多数内部操作都使用模板参数来实现。运用了Eigen库。
系统框架,只由灰色方框需要自己定义来解决新的优化问题[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKC6qto5-1648560327984)(g2o_a_general_framework_for_graph_optimaization.assets/image-20220329153511062.png)]
使用所提供的的基类,派生新的节点类型只需要定义 ⊞ \boxplus ⊞ 算子应用与增量。
连接两个顶点 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矩阵。对底层矩阵块结构进行操作,相比于标量矩阵乘法更加高效的矩阵乘法。
该框架时未知的嵌入式线性求解器,可适用于不同问题。
实验中作者使用了两个求解器
使用真实数据集和人工数据集比较g2o与其他先进算法。然后介绍了实现数据集、设备相关信息。
与其他算法运行时间比较。
该框架只需要实现误差函数和更新步骤,能够轻松地比较不同的参数化。为此实现了BA中表示姿态的两个不同的参数化。
CHOLMOD
和CSpare
. 还利用block-Jacobi
预调节器将PCG
实现为一种迭代方法。PCG
的收敛取决于初始猜想与最优解的接近程度。