Preconditioning for Iterative Solvers
Transforming a linear system so that an iterative solver converges in far fewer steps by clustering the spectrum.
Why iterative solvers need help
The convergence of Krylov solvers depends on the spectrum of the matrix: clustered eigenvalues converge fast, a spectrum spread over many orders of magnitude converges slowly. Real problems, especially stiff PDEs, often have terrible spectra. Preconditioning replaces the system Ax = b with an equivalent system that has a much friendlier spectrum, so the same solver needs a fraction of the iterations.
The core idea
A preconditioner is a matrix M that approximates A but is cheap to invert. Instead of solving Ax = b, one solves M^(-1) A x = M^(-1) b (left preconditioning) or an equivalent right- or split-preconditioned form. If M is close to A, then M^(-1) A is close to the identity, whose eigenvalues are all one, so the preconditioned solver converges almost instantly. The art is choosing M cheap enough to apply yet close enough to A to help.
Common preconditioners
- Jacobi (diagonal) and block-Jacobi: trivial to apply, modest benefit
- Incomplete LU or Cholesky: an approximate factorization that drops small fill entries
- Multigrid used as a preconditioner: often the most powerful for elliptic problems
- Domain-decomposition (Schwarz) preconditioners: parallel-friendly and scalable with a coarse space
The trade-off and physics-based options
A stronger preconditioner cuts iterations but costs more per iteration to apply; the goal is to minimize total work, not iteration count alone. Preconditioners must also match the solver: a symmetric positive-definite preconditioner is required to keep conjugate gradient valid. In plasma and MHD codes, physics-based preconditioners approximate the dominant fast physics (fast waves, parabolic diffusion) with a cheap operator, taming the stiffness that would otherwise cripple a general-purpose method.