gko::solver::Minres#
Minimum residual method for symmetric (possibly indefinite) systems. Minimises the 2-norm of the residual over the current Krylov subspace using a short three-term recurrence. The right choice when the matrix is symmetric but not guaranteed positive definite.
-
template<typename ValueType = default_precision>
class Minres # Inherits from
public gko::EnableLinOp<Minres<default_precision>>
public gko::solver::EnablePreconditionedIterativeSolver<default_precision, Minres<default_precision>>
public gko::Transposable
Minres is an iterative type Krylov subspace method, which is suitable for indefinite and full-rank symmetric/hermitian operators. It is a specialization of the Gmres method for symmetric/hermitian operators, and can be computed using short recurrences, similar to the CG method.
For symmetric \( A \) the Arnoldi process collapses to a three-term Lanczos recurrence and the Hessenberg matrix \( \bar H_m \) becomes tridiagonal \( \bar T_m \). Minres exploits this structure to minimise the residual norm
\[ y_m = \arg\min_{y \in \mathbb{R}^m} \| \beta\, e_1 - \bar T_m\, y \|_2, \qquad \beta = \| r_0 \|_2, \]using an incremental QR factorisation of \( \bar T_m \). The Givens rotations and the resulting short recurrence allow each iteration to run with bounded memory and one matrix-vector product, in contrast to GMRES’s growing Krylov basis.The implementation in Ginkgo makes use of the merged kernel to make the best use of data locality. The inner operations in one iteration of Minres are merged into 2 separate steps.
- References
Greenbaum, A. Iterative Methods for Solving Linear Systems. SIAM Frontiers in Applied Mathematics, 17, 1997. https://doi.org/10.1137/1.9781611970937
Choi, S.-C. T. Iterative Methods for Singular Linear Equations and Least-Squares Problems. PhD thesis, Stanford University, 2006. https://web.stanford.edu/group/SOL/dissertations/sou-cheng-choi-thesis.pdf
Note
The Minres solver only reports an approximation of the residual norm directly to the stopping criteria. Neither the actual residual, nor the actual residual norm are reported. Thus, to get the minimal overhead, the gko::stop::ImplicitResidualNorm criteria should be used. The gko::stop::ResidualNorm criteria will require an additional matrix-vector product and global reduction.
- Template Parameters:
ValueType – precision of matrix elements
Public Functions
-
virtual std::unique_ptr<LinOp> transpose() const override#
Returns a LinOp representing the transpose of the Transposable object.
- Returns:
a pointer to the new transposed object
-
virtual std::unique_ptr<LinOp> conj_transpose() const override#
Returns a LinOp representing the conjugate transpose of the Transposable object.
- Returns:
a pointer to the new conjugate transposed object
-
bool apply_uses_initial_guess() const override#
Return true as iterative solvers use the data in x as an initial guess.
Public Static Functions
- static parameters_type parse(
- const config::pnode &config,
- const config::registry &context,
- const config::type_descriptor &td_for_child = config::make_type_descriptor<ValueType>(),
Create the parameters from the property_tree. Because this is directly tied to the specific type, the value/index type settings within config are ignored and type_descriptor is only used for children configs.
- Parameters:
config – the property tree for setting
context – the registry
td_for_child – the type descriptor for children configs. The default uses the value type of this class.
- Returns:
parameters
-
struct parameters_type #
Inherits from
public gko::solver::enable_preconditioned_iterative_solver_factory_parameters<parameters_type, Factory>