| // 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, |
| * - 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/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 |