稀疏矩阵的Cholesky分解算法详解
1. 右视超节点算法
在处理线性方程组系统时,涉及到对列的修改操作。使用超节点修改列有两种情况:
- 当列 $j$ 属于超节点 $J$ 时,列 $j$ 仅由 $J$ 中位于其左侧的列修改。
- 当列 $j$ 不属于超节点 $J$ 时,列 $j$ 由 $J$ 的所有列修改。
利用 smod()
过程,Cholesky 分解可以通过以下计算方案执行,也称为右视超节点算法:
supernode cholesky =
for each supernode J do from left to right {
cdiv(first(J));
for j = first(J) + 1, ..., last(J) {
smod(j, J);
cdiv(j);
}
for k ∈ Struct(L*(last(J)))
smod(k, J);
}
此计算方案仍然从左到右计算 $L$ 的列。与之前算法的不同之处在于,与超节点相关的计算被合并。在超节点级别,使用右视方案:对于超节点 $J$ 的第一列计算,当完成与所有左侧列的修改后,仅需一次 cdiv()
操作。$J$ 的列以左视方式计算:在计算超节点 $J$ 左侧的所有超节点后,由于超节点右视方案,$J$ 的列已用这些超节点修改,列 $j$ 的计算是先使用 $J$ 中位于 $j$ 左侧的所有列修改它,然后执行 cdiv()