libeigen/eigen!2663 Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
124 lines
4.8 KiB
Plaintext
124 lines
4.8 KiB
Plaintext
// 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
|