Sparse direct solvers
2025-09-22
Goal: \(A = R^T R\) (\(R = L^T\)) for sparse spd \(A\)
\[\begin{bmatrix} A_{11} & A_{21}^T \\ A_{21} & A_{22} \end{bmatrix} = \begin{bmatrix} R_{11}^T & 0 \\ R_{12}^T & R_{22}^T \end{bmatrix} \begin{bmatrix} R_{11} & R_{12} \\ 0 & R_{22} \end{bmatrix}\]
Look: right/down
Look: left/up
\[ \begin{bmatrix} \times & \times & \times \\ \times & \times & \times & \times \\ \times & \times & \times & \times & \times \\ & \times & \times & \times & \times & \times \\ & & \times & \times & \times & \times & \times \\ & & & \ddots & \ddots & \ddots & \ddots & \ddots \\ & & & & \times & \times & \times & \times & \times \\ & & & & & \times & \times & \times & \times \\ & & & & & & \times & \times & \times \\ \end{bmatrix} \]
\[ \begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} \\ {\color{lightgray}0} & * & * & \times \\ {\color{lightgray}0} & * & * & \times & \times \\ & \times & \times & \times & \times & \times \\ & & \times & \times & \times & \times & \times \\ & & & \ddots & \ddots & \ddots & \ddots & \ddots \\ & & & & \times & \times & \times & \times & \times \\ & & & & & \times & \times & \times & \times \\ & & & & & & \times & \times & \times \\ \end{bmatrix} \]
\[ \begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} \\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} \\ {\color{lightgray}0} & {\color{lightgray}0} & * & * & \times \\ & {\color{lightgray}0} & * & * & \times & \times \\ & & \times & \times & \times & \times & \times \\ & & & \ddots & \ddots & \ddots & \ddots & \ddots \\ & & & & \times & \times & \times & \times & \times \\ & & & & & \times & \times & \times & \times \\ & & & & & & \times & \times & \times \\ \end{bmatrix} \]
Keep only the upper triangle: \[ B = \begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & a_{13} & \ldots & a_{n-2,n} \\ {\color{lightgray}\cdot} & a_{12} & a_{23} & \ldots & a_{n-1,n} \\ a_{11} & a_{22} & a_{33} & \ldots & a_{n,n} \end{bmatrix} \] Indexing convention: \(b_{dj} = a_{j-m+d,j}\), \(m = 1 + \mathrm{bw}\)
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & \times & \times & \times & \times & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & * & \times & \times & \times & \times & \times & \times\\ {\color{red}*} & * & * & \times & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & \times & \times & \times & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & * & \times & \times & \times & \times & \times\\ {\color{red}*} & {\color{red}*} & * & * & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & \times & \times & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & * & \times & \times & \times & \times\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & * & * & \times & \times & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & \times & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & * & \times & \times & \times\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & * & * & \times & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & * & \times & \times\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & * & * & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & * & \times\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & * & * & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & *\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & * & *\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & *\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{blue}\times} & \times & \times & & & & & & \\ \times & \times & \times & \times & & & & & \\ \times & \times & \times & \times & \times & & & & \\ & \times & \times & \times & \times & \times & & & \\ & & \times & \times & \times & \times & \times & & \\ & & & \times & \times & \times & \times & \times & \\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ & & & & & & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{blue}+} & \times & & & & & & \\ {\color{lightgray}0} & {\color{blue}\times} & \times & \times & & & & & \\ {\color{lightgray}0} & \times & \times & \times & \times & & & & \\ & \times & \times & \times & \times & \times & & & \\ & & \times & \times & \times & \times & \times & & \\ & & & \times & \times & \times & \times & \times & \\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ & & & & & & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{blue}+} & & & & & & \\ {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times & & & & & \\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times & \times & & & & \\ & {\color{lightgray}0} & \times & \times & \times & \times & & & \\ & & \times & \times & \times & \times & \times & & \\ & & & \times & \times & \times & \times & \times & \\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ & & & & & & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & & & & & \\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times & & & & \\ & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times & \times & & & \\ & & {\color{lightgray}0} & \times & \times & \times & \times & & \\ & & & \times & \times & \times & \times & \times & \\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ & & & & & & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & \\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & & & & \\ & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times & & & \\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times & \times & & \\ & & & {\color{lightgray}0} & \times & \times & \times & \times & \\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ & & & & & & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & \\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & \\ & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & & & \\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times & & \\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times & \times & \\ & & & & {\color{lightgray}0} & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ & & & & & & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & \\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & \\ & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & \\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & & \\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times & \\ & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times & \times\\ & & & & & {\color{lightgray}0} & \times & \times & \times\\ & & & & & & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & \\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & \\ & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & \\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & \\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \\ & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times\\ & & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times\\ & & & & & & {\color{lightgray}0} & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & \\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & \\ & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & \\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & \\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & \\ & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+}\\ & & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+}\\ & & & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times}\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & \\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & \\ & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & \\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & \\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & \\ & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ & & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*}\\ & & & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*}\\ \end{bmatrix}\]
To advance factorization from \(k-1\) to \(k\):
A[1:k-1,k] has only \(b\) nonzeros at end\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & \times & \times & \times & \times & \times & \times & \times\\ {\color{lightgray}\cdot} & {\color{blue}+} & \times & \times & \times & \times & \times & \times & \times\\ {\color{red}*} & {\color{blue}\times} & \times & \times & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{blue}+} & \times & \times & \times & \times & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{blue}+} & \times & \times & \times & \times & \times & \times\\ {\color{red}*} & {\color{red}*} & {\color{blue}\times} & \times & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{blue}+} & \times & \times & \times & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times & \times & \times & \times & \times\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}\times} & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times & \times & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times & \times & \times & \times\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}\times} & \times & \times & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times & \times & \times\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}\times} & \times & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times & \times\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}\times} & \times & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}\times} & \times\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+}\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+}\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}\times}\\ \end{bmatrix}\]
\[\begin{bmatrix} {\color{lightgray}\cdot} & {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ {\color{lightgray}\cdot} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{blue}\times} & \times & \times & & & & & & \times\\ \times & \times & \times & & & & & & \times\\ \times & \times & \times & \times & \times & & & & \times\\ & & \times & \times & \times & \times & & & \times\\ & & \times & \times & \times & \times & \times & & \times\\ & & & \times & \times & \times & \times & \times & \times\\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ \times & \times & \times & \times & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{blue}+} & \times & & & & & & \times\\ {\color{lightgray}0} & {\color{blue}\times} & \times & & & & & & \times\\ {\color{lightgray}0} & \times & \times & \times & \times & & & & \times\\ & & \times & \times & \times & \times & & & \times\\ & & \times & \times & \times & \times & \times & & \times\\ & & & \times & \times & \times & \times & \times & \times\\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ {\color{lightgray}0} & \times & \times & \times & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{blue}+} & & & & & & \times\\ {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & & & & & & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times & \times & & & & \times\\ & & \times & \times & \times & \times & & & \times\\ & & \times & \times & \times & \times & \times & & \times\\ & & & \times & \times & \times & \times & \times & \times\\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & \times & \times & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times & & & & \times\\ & & {\color{lightgray}0} & {\color{blue}\times} & \times & \times & & & \times\\ & & {\color{lightgray}0} & \times & \times & \times & \times & & \times\\ & & & \times & \times & \times & \times & \times & \times\\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & \times & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & & & & \times\\ & & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times & & & \times\\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times & \times & & \times\\ & & & {\color{lightgray}0} & \times & \times & \times & \times & \times\\ & & & & \times & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & \times & \times & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & \times\\ & & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & & & \times\\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times & & \times\\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times & \times & \times\\ & & & & {\color{lightgray}0} & \times & \times & \times & \times\\ & & & & & \times & \times & \times & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & \times & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & \times\\ & & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & \times\\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & & \times\\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times & \times\\ & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times & \times\\ & & & & & {\color{lightgray}0} & \times & \times & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & \times & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & & & & & & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & \times\\ & & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & \times\\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & \times\\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+} & \times\\ & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+} & \times\\ & & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times} & \times\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & \times & \times\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & {\color{blue}+}\\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & & & & & & {\color{blue}+}\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & {\color{blue}+}\\ & & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & {\color{blue}+}\\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & {\color{blue}+}\\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{blue}+}\\ & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{blue}+}\\ & & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{blue}+}\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{blue}\times}\\ \end{bmatrix}\]
Key: \({\color{red}*}\) in \(L\); \({\color{blue}+}\) is rhs for next solve
\[\begin{bmatrix} {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & & & {\color{red}*}\\ {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & & & & & & {\color{red}*}\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & & {\color{red}*}\\ & & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & & {\color{red}*}\\ & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & & {\color{red}*}\\ & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*} & {\color{red}*}\\ & & & & & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*} & {\color{red}*}\\ {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{lightgray}0} & {\color{red}*}\\ \end{bmatrix}\]
Graph of \(A = A^T \in \mathbb{R}^{n \times n}\) has
Associate with \(R\) a directed graph
\[\begin{bmatrix} \times & \times & \times & \times & \times \\ \times & \times & & & \\ \times & & \times & & \\ \times & & & \times & \\ \times & & & & \times \end{bmatrix}\]
\[\begin{bmatrix} \times & & & & \times \\ & \times & & & \times \\ & & \times & & \times \\ & & & \times & \times \\ \times & \times & \times & \times & \times \end{bmatrix}\]
\[\begin{bmatrix} \times & \times & \times & \times & \times \\ {\color{lightgray}0} & \times & {\color{red}*} & {\color{red}*} & {\color{red}*} \\ {\color{lightgray}0} & & \times & {\color{red}*} & {\color{red}*} \\ {\color{lightgray}0} & & & \times & {\color{red}*} \\ {\color{lightgray}0} & & & & \times \end{bmatrix}\]
\[\begin{bmatrix} \times & & & & \times \\ & \times & & & \times \\ & & \times & & \times \\ & & & \times & \times \\ {\color{\lightgray}0} & {\color{\lightgray}0} & {\color{\lightgray}0} & {\color{\lightgray}0} & \times \end{bmatrix}\]
Consider a more interesting example:
Consider \(x = R^{-T} b\) (used in left-looking Cholesky): \[ x_i = \left( b_i - \sum_{j < i} r_{ji} x_j \right)/r_{ii} \]
Two perspectives:
Either way, order matters!
With the elimination tree, we can:
For more details: Davis, Direct Methods for Sparse Linear Systems, SIAM 2006
\[\begin{bmatrix} \times & & & & \times \\ & \times & & & \times \\ & & \times & & \times \\ & & & \times & \times \\ \times & \times & \times & \times & \times \end{bmatrix}\]
No fill for trees eliminated in post order!
\[ S = \begin{bmatrix} S_{AA} & & {\color[rgb]{0,0,1}S_{AC}} & & & & {\color[rgb]{1,0,0}S_{AG}} \\ & S_{BB} & {\color[rgb]{0,0,1}S_{BC}} & & & & {\color[rgb]{1,0,0}S_{BG}} \\ {\color[rgb]{0,0,1}S_{CA}} & {\color[rgb]{0,0,1}S_{CB}} & {\color[rgb]{0,0,1} S_{CC}} & & & & {\color[rgb]{1,0,0}S_{CG}} \\ & & & S_{DD} & & {\color[rgb]{0,0,1}S_{DF}} & {\color[rgb]{1,0,0}S_{DG}} \\ & & & & S_{EE} & {\color[rgb]{0,0,1}S_{EF}} & {\color[rgb]{1,0,0}S_{EG}} \\ & & & {\color[rgb]{0,0,1}S_{FD}} & {\color[rgb]{0,0,1}S_{FE}} & {\color[rgb]{0,0,1}S_{FF}} & {\color[rgb]{1,0,0}S_{FG}} \\ {\color[rgb]{1,0,0}S_{GA}} & {\color[rgb]{1,0,0}S_{GB}} & {\color[rgb]{1,0,0}S_{GC}} & {\color[rgb]{1,0,0}S_{GD}} & {\color[rgb]{1,0,0}S_{GE}} & {\color[rgb]{1,0,0}S_{GF}} & {\color[rgb]{1,0,0}S_{GG}} \end{bmatrix} \]
In 2D:
Recurse: \[ \frac{5}{6} n^3 \left( 1 + \frac{1}{2} + \frac{1}{4} + \ldots \right) \approx \frac{5}{3}n^3. \] Or \(O(N^{3/2})\) time (and about \(O(N \log N)\) fill).
Q: 3D scaling is worse. Why?
What we like:
Switch-over when \(\mbox{nnz}(A)/n^2 \ll 1\).