Various literature and library implementations like petsc use preconditioners based on simple smoothers that themselves could be used the solve the systems directly. e.g. say I have a function

void do_jacobi_smooth(const matrix A, vector x, const vector b);

which updates $x$ for the system $Ax=b$. Say I have a system where repeated calls to this eventually converge.

What I'm confused by in the literature of preconditioned methods, is that e.g. from the wiki page https://en.wikipedia.org/wiki/Conjugate_gradient_method for conjugate gradient you see the use of a preconditioner $M^{-1}$ written as

$$ z_0 := M^{-1}r_0 $$

so that $M^{-1}$ is some kind of (here linear) operator.

My question is what is the form of this operator, as implemented by something like the do_jacobi_smooth(A,x,b) above? In other words, say I have an unpreconditioned conjugate gradient implementation, and a jacobi smoother implementation (or a multigrid solver), how do I connect these parts to get a preconditioned CG?

Is it as simple as applying one iteration with a 0 initial guess?



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.