conjugate gradient algorithm. This technique is useful for solving the linear system for the same matrix with multiple right-hand sides. Specifically, denote by $AX=B$ the linear system one wants to solve, where $B$ is a matrix with $s$ columns, and the same for the unknown $X$. Conventionally, matrices such as $B$ are called *block vectors*, honoring the fact that the columns of $B$ are handled simultaneously. The block conjugate gradient algorithm is similar to the single-vector version except that the iterates $x^i$, $r^i$ and $q^i$ now become block iterates $X^i$, $R^i$ and $Q^i$ and the coefficients $\alpha^i$ and $\beta^i$ become $s\times s$ matrices. The detailed algorithm is not shown here; interested readers are referred to @olearyblockcg. If $X^*$ is the exact solution, then $X^i$ approaches $X^*$ at least as fast as linearly: $$\label{eqnbcgconverge} \bigl\|\bigl(X^i\bigr)_j-\bigl(X^*
\bigr)_j\bigr\|_A\le C_j \biggl(\frac{\sqrt{\kappa_s(A)}-1}{\sqrt{\kappa_s(A)}+1}
\biggr)^{i},\qquad j=1,\ldots,s,$$ where $(X^i)_j$ and $(X^*)_j$ are the $j$th column of $X^i$ and $X^*$, respectively; $C_j$ is some constant dependent on $j$ but not $i$; and $\kappa_s(A)$ is the ratio between $\lambda_n(A)$ and $\lambda_s(A)$ with the eigenvalues $\lambda_k$ sorted increasingly. Comparing (\[eqncgconverge\]) with (\[eqnbcgconverge\]), we see that the modified condition number $\kappa_s$ is less than $\kappa$, which means that the block version of 