mathnet-numerics icon indicating copy to clipboard operation
mathnet-numerics copied to clipboard

Create a preconditioner usage guide for the iterative solvers

Open cdrnet opened this issue 12 years ago • 0 comments

From: https://mathnetnumerics.codeplex.com/workitem/5659

As I am not familiar with preconditioning: is there any guide, when to use what preconditioner with a specific solver? Or when to use preconditioning at all? I guess it's for systems, where the iteration would not converge without preconditioning. Looking at the benchmark results, one should probably use the Diagonal preconditioner,because it doesn't seem to affect the overall solving time.

Reply:

Off the top of my head (and from a very dusty part of my brain) preconditioning is normally used to make the iterative process converge faster (i.e. fewer iterations) by turning the original matrix equation Ax = B in to an equivalent equation. Which pre-conditioner should be used depends on the original equation so it's kinda hard to make a final statement about the usefulness of the different pre-conditioners. In essence the more complicated pre-conditioners should be capable of stabilizing the more 'unbalanced / stiffer' matrices (which if I remember correctly are the matrices which have eigenvalues that are either stacked or very far apart). Obviously the more complicated pre-conditioners will take more time to run but they may be able to provide a solution while the simpler ones won't provide a solution.

Ordering the preconditioners from simple to complex:

  • UnitPreconditioner
  • DiagonalPreconditioner
  • IncompleteLUPreconditioner
  • IlutpPreconditioner

Finally if the matrix A has a structure (e.g. banded) then the simplest pre-conditioner should be enough to provide a good speed-up. If the matrix has no structure then probably the IncompleteLU or Ilutp pre-conditioners will be more useful. However this depends on the actual values in the matrix etc.

If this is all too complicated then you should have a look at the composite solver which will try to solve the system with different combinations of pre-conditioner-solver until it succeeds. For that to work you'll have to compute the speed and reliability factors of the different solvers / pre-conditioners, which may or may not be easy.

cdrnet avatar Oct 03 '13 00:10 cdrnet