The [[conjugate gradient method]] is a [[numerical analysis|numerical algorithm]] that solves a [[system of linear equations]]
:<math>A x= b.\,</math>
where <math>A</math> is symmetric [positive definite]. If the [[matrix]] <math>A</math> is [[ill-conditioned]], i.e. it has a large [[condition number]] <math>\kappa(A)</math>, it is often useful to use a [[preconditioner|preconditioning matrix]] <math>P^{-1}</math> that is chosen such that <math>P^{-1} \approx A^{-1}</math> and solve the system
:<math> P^{-1}Ax = P^{-1}b,\,</math>
instead.
To save computional time it is important to take a symetric preconditioner. This can be Jacobi, symmetric Gauss-Seidel or Symmetric Successive Over Relaxation (SSOR).
The simplest preconditioner is a diagonal matrix that has just the diagonal elements of <math>A</math>. This is known as Jacobi preconditioning or diagonal scaling. Since diagonal matrices are trivial to invert and store in memory, a diagonal preconditioner is a good starting point. More sophisticated choices must trade-off the reduction in <math>\kappa(A)</math>, and hence faster convergence, with the time spent computing <math>P^{-1}</math>.
* [http://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf An Introduction to the Conjugate Gradient Method Without the Agonizing Pain] by Jonathan Richard Shewchuck