<读书笔记8>稀疏矩阵Cholesky分解[3]

<读书笔记8>稀疏矩阵Cholesky分解[3]

本篇为稀疏矩阵求解算法经典论著<Direct Methods for Sparse Linear System>的<读书笔记 8>

4.6 Symbolic analysis

矩阵的符号分析是其数值分解的前导。它通常只包括计算非零模式而不进行数值计算。这使得数值分解可以对具有相同非零模式的矩阵序列进行重复计算(在求解非线性方程时经常出现的一种情况)。符号因子分解包括对因子分解的非零模式的显式表示的计算;一些稀疏的Cholesky算法需要这一点。矩阵的置换对fill-in有很大的影响。通常找到一个fill-reducing置换矩阵 P ,使得 PAP^T 的因子分解要比 A 更加稀疏。cs_schol函数完成了应用于up-looking 稀疏Cholesky分解的符号分析。

4.7 Up-looking Cholesky

函数cs_cho1是up-looking Cholesky算法的实现。在本书中,用粗体描述代码中相对应的注释,如下:

Nonzero pattern of L(k, :):

Triangular solve:

Compute L(k,k):

执行完整的稀疏Cholesky分解,包括用函数S=cs_schol(order,A)完成fill-reducing preordering和符号分析,接下来用N=cs_chol(A,S),其中order为0,则用自然排序,如果order为1,则用对 A+A^T 完成fill-reducing 最小度排序。

4.8 left-looking and supernodal Cholesky

left-looking的Cholesky分解算法比向上的Cholesky分解算法更常用。其伪代码为:

它一次计算一列,可以从以下表达式推导得到:

\begin{bmatrix}L_{11} & &\\ l_{12}^{T} & l_{22} \\ L_{31} & l_{32} & L_{33} \end{bmatrix} \begin{bmatrix}L_{11}^{T} & l_{21}&L_{31}\\ & l_{22} &l_{32}^T \\ & & L_{33}^T \end{bmatrix}= \begin{bmatrix}A_{11} & a_{21}&A_{31}^T\\ a_{12}^{T} & a_{22} &a_{32}^T \\ A_{31} & a_{32} & A_{33} \end{bmatrix}

其中,每个矩阵的中间的行和列均为矩阵第 k 行和第 k 列。如果 L 的前 k-1 列已经算出来,则 l_{22}=\sqrt{a_{22}-l_{12}^Tl_{12}} ,然后就能得到 l_{32}=(a_{32}-L_{31}l_{12})/l_{22} 。对于稀疏矩阵的伪代码为:

该方法要求计算 L 的列的非零样式(按顺序)在数值分解之前。相比之下,up-looking方法在进行数值因数分解之前只需要列计数的累积和,并在一次遍历中计算非零样式(按排序顺序)和数值分解。使用cs_ereach可以在 O(|L|) 时间内计算 L 的非零样式。

left-looking的数值分解需要访问 L 的第 k 行。非零样式 L(k,:) 通过第 k 行子树 \mathcal T^k 。这对于up-looking算法已经足够,但是对于left-looking方法仍然还需要访问 L(k,:) 以及submatrix L(k:n,1:k-1) 的数值。

left-looking算法构成了超节点法(supernodal)的基础。在Cholesky分解以及LU分解中,经常会出现以下形式的矩阵,黑色的稠密块(block)即

编辑于 2023-09-20 10:19・IP 属地未知