Rodin/Solver/MINRES.h file

MINRES solver for symmetric (possibly indefinite) linear systems.

This header provides the MINRES (Minimum Residual) solver class, an iterative method for solving linear systems:

\[ Ax = b \]

where $ A $ is symmetric (and may be indefinite).

Algorithm

MINRES is a Lanczos-based Krylov method that minimizes the residual norm over the generated Krylov subspace, while preserving short recurrences for symmetric operators.

Applicability

  • Symmetric positive definite (works, but CG is usually preferable)
  • Symmetric indefinite systems (e.g., some mixed formulations, saddle-point after suitable transformations, Helmholtz-type operators, etc.)

Notes

  • This implementation uses Eigen's unsupported MINRES.

Usage Example

Problem problem(u, v);
problem = Integral(Grad(u), Grad(v)) - Integral(f, v);

Solver::MINRES solver(problem);
solver.setTolerance(1e-10).setMaxIterations(1000).solve();

if (solver.success())
  std::cout << "Converged!\n";

Namespaces

namespace Rodin
The Rodin library for Shape and Topology Optimization.
namespace Rodin::Solver
Module for linear algebra systems.

Classes

template<class Scalar>
class Rodin::Solver::MINRES<Math::LinearSystem<Math::SparseMatrix<Scalar>, Math::Vector<Scalar>>>
MINRES solver for symmetric sparse systems.
template<class Scalar>
class Rodin::Solver::MINRES<Math::LinearSystem<Math::Matrix<Scalar>, Math::Vector<Scalar>>>
MINRES solver for symmetric dense systems.