| // This file is part of Eigen, a lightweight C++ template library | |
| // for linear algebra. | |
| // | |
| // This Source Code Form is subject to the terms of the Mozilla | |
| // Public License v. 2.0. If a copy of the MPL was not distributed | |
| // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. | |
| // SPDX-FileCopyrightText: The Eigen Authors | |
| // SPDX-License-Identifier: MPL-2.0 | |
| #ifndef EIGEN_ITERATIVELINEARSOLVERS_MODULE_H | |
| #define EIGEN_ITERATIVELINEARSOLVERS_MODULE_H | |
| #include "SparseCore" | |
| #include "OrderingMethods" | |
| #include "Jacobi" | |
| #include "Householder" | |
| #include "QR" | |
| #include "LU" | |
| #include "src/Core/util/DisableStupidWarnings.h" | |
| /** | |
| * \defgroup IterativeLinearSolvers_Module IterativeLinearSolvers module | |
| * | |
| * This module provides iterative methods to solve problems of the form \c A \c x = \c b, where \c A is a | |
| squared matrix, usually very large and sparse. | |
| * Those solvers are accessible via the following classes: | |
| * - ConjugateGradient for selfadjoint (hermitian) matrices, | |
| * - LeastSquaresConjugateGradient for rectangular least-square problems, | |
| * - LSMR for rectangular least-square problems (Golub-Kahan bidiagonalization, optionally damped), | |
| * - BiCGSTAB for general square matrices, | |
| * - GMRES - a Householder GMRES implementation, | |
| * - DGMRES - a deflated GMRES implementation, | |
| * - MINRES for symmetric indefinite matrices, | |
| * - IDRS - an IDR(s) implementation, | |
| * - BiCGSTABL - a BiCGSTAB(L) implementation, | |
| * - IDRSTABL - an IDR(s)STAB(L) implementation. | |
| * | |
| * These iterative solvers are associated with some preconditioners: | |
| * - IdentityPreconditioner - not really useful | |
| * - DiagonalPreconditioner - also called Jacobi preconditioner, work very well on diagonal dominant matrices. | |
| * - IncompleteLUT - incomplete LU factorization with dual thresholding | |
| * - IncompleteLU - incomplete LU factorization without fill-in | |
| * | |
| * The IterScaling class can be used as a preprocessing step to equilibrate the row and column norms of a matrix. | |
| * | |
| * Choosing the best solver for solving \c A \c x = \c b depends a lot on the preconditioner chosen as well as the | |
| * properties of \c A. The following flowchart might help you. | |
| * \dot width=50% | |
| * digraph g { | |
| * node [ fontname=Arial, fontsize=11]; | |
| * edge [ fontname=Helvetica, fontsize=10 ]; | |
| * A1[label="hermitian", shape="box"]; | |
| * A2[label="positive definite", shape="box"]; | |
| * CG[shape="plaintext"]; | |
| * A3[label="ill conditioned", shape="box"]; | |
| * A4[label="good preconditioner", shape="box"]; | |
| * A5[label="flexible preconditioner", shape="box"]; | |
| * A6[label="strongly indefinite", shape="box"]; | |
| * A8[label="large imaginary eigenvalue", shape="box"]; | |
| * A7[label="large imaginary eigenvalue",shape="box"]; | |
| * | |
| * SYMMLQ[shape="plaintext"]; | |
| * MINRES[shape="plaintext"]; | |
| * GCR[shape="plaintext"]; | |
| * GMRES[shape="plaintext"]; | |
| * IDRSTABL[shape="plaintext"]; | |
| * IDRS[shape="plaintext"]; | |
| * BICGSTABL[shape="plaintext"]; | |
| * BICGSTAB[shape="plaintext"]; | |
| * | |
| * A1 -> A2 [label="yes"]; | |
| * A2 -> CG [label="yes"]; | |
| * A2 -> A3 [label="no"]; | |
| * A3 -> SYMMLQ [label="yes"]; | |
| * A3 -> MINRES [label="no"]; | |
| * | |
| * A1 -> A4 [label="no"]; | |
| * A4 -> A5 [label="yes"]; | |
| * A5 -> GCR [label="yes"]; | |
| * A5 -> GMRES [label="no"]; | |
| * | |
| * A4 -> A6 [label="no"]; | |
| * A6 -> A8 [label="yes"]; | |
| * A6 -> A7 [label="no"]; | |
| * A7 -> BICGSTABL [label="yes"]; | |
| * A7 -> BICGSTAB [label="no"]; | |
| * A8 -> IDRSTABL [label="yes"]; | |
| * A8 -> IDRS [label="no"]; | |
| * } | |
| * \enddot | |
| * | |
| * Such problems can also be solved using the direct sparse decomposition modules: SparseCholesky, CholmodSupport, | |
| UmfPackSupport, SuperLUSupport, AccelerateSupport. | |
| * | |
| \code | |
| #include <Eigen/IterativeLinearSolvers> | |
| \endcode | |
| */ | |
| // IWYU pragma: begin_exports | |
| #include "src/IterativeLinearSolvers/SolveWithGuess.h" | |
| #include "src/IterativeLinearSolvers/IterativeSolverBase.h" | |
| #include "src/IterativeLinearSolvers/BasicPreconditioners.h" | |
| #include "src/IterativeLinearSolvers/ConjugateGradient.h" | |
| #include "src/IterativeLinearSolvers/LeastSquareConjugateGradient.h" | |
| #include "src/IterativeLinearSolvers/LSMR.h" | |
| #include "src/IterativeLinearSolvers/BiCGSTAB.h" | |
| #include "src/IterativeLinearSolvers/IncompleteLUT.h" | |
| #include "src/IterativeLinearSolvers/IncompleteCholesky.h" | |
| #include "src/IterativeLinearSolvers/Scaling.h" | |
| #include "src/IterativeLinearSolvers/IncompleteLU.h" | |
| #include "src/IterativeLinearSolvers/GMRES.h" | |
| #include "src/IterativeLinearSolvers/DGMRES.h" | |
| #include "src/IterativeLinearSolvers/MINRES.h" | |
| #include "src/IterativeLinearSolvers/IDRS.h" | |
| #include "src/IterativeLinearSolvers/BiCGSTABL.h" | |
| #include "src/IterativeLinearSolvers/IDRSTABL.h" | |
| // IWYU pragma: end_exports | |
| #include "src/Core/util/ReenableStupidWarnings.h" | |
| #endif // EIGEN_ITERATIVELINEARSOLVERS_MODULE_H |