Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
eigenvalues.hpp File Reference

Extremal eigenvalues of a square operator via the power method or, for a symmetric one, the Lanczos method. More...

Classes

struct  mundy::PowerResult< Scalar >
 Result of a power-method solve: iteration count, final residual, eigenvalue, and whether it converged. More...
struct  mundy::EigenBounds< Scalar >
 The dominant (largest-magnitude) end of a spectrum and the end opposite it. More...
struct  mundy::LanczosResult< Scalar >
 Result of a Lanczos solve: iteration count, final residual, spectrum bounds, and whether it converged. More...
struct  mundy::PowerConfig< Scalar >
struct  mundy::LanczosConfig< Scalar >
class  mundy::EigenProblem< Backend, LinearOp, Workspace >
 The eigenvalue problem A q = lambda q for a square operator A, paired with a mutable workspace. More...
class  mundy::PowerState< Scalar, QVector, ZVector, RVector >
 The power-method state: the q/z/r vectors and the iteration scalars. More...
class  mundy::LanczosState< Scalar, VVector, VPrevVector, ZVector, AzVector, AlphaArray, BetaArray >
 The Lanczos state: the v/v_prev/z/Az vectors, the tridiagonal T as its diagonal alpha and off-diagonal beta, and the iteration scalars. More...
class  mundy::PowerStrategy< ResidualPolicy, Config >
 The power-method strategy: initialize/iterate/done/result over (Problem, State). More...
class  mundy::LanczosStrategy< Config, Precond >
 The Lanczos strategy: initialize/iterate/done/result over (Problem, State), preconditioned by Precond. More...

Namespaces

namespace  mundy

Functions

Solve result
template<class Scalar>
std::ostream & mundy::operator<< (std::ostream &os, const PowerResult< Scalar > result)
 Write a PowerResult to an ostream.
template<class Scalar>
std::ostream & mundy::operator<< (std::ostream &os, const LanczosResult< Scalar > result)
 Write a LanczosResult to an ostream.
Factory functions
template<class Backend, class LinearOp>
auto mundy::make_eigen_problem (LinearOp &&A)
template<class ResidualPolicy, class Scalar>
auto mundy::make_power_strategy (ResidualPolicy &&residual_policy, const PowerConfig< Scalar > &cfg={})
template<class Scalar>
auto mundy::make_power_strategy (const PowerConfig< Scalar > &cfg={})
template<class QVector, class ZVector, class RVector>
auto mundy::make_power_state (QVector &&q, ZVector &&z, RVector &&r)
template<class Scalar>
auto mundy::make_lanczos_strategy (const LanczosConfig< Scalar > &cfg={})
template<class Scalar, class Precond>
auto mundy::make_lanczos_strategy (const LanczosConfig< Scalar > &cfg, Precond &&precond)
template<class VVector, class VPrevVector, class ZVector, class AzVector, class AlphaArray, class BetaArray>
auto mundy::make_lanczos_state (VVector &&v, VPrevVector &&v_prev, ZVector &&z, AzVector &&Az, AlphaArray &&alpha, BetaArray &&beta)
template<class Problem, class Strategy, class State>
auto mundy::solve_eigen_problem (const Problem &prob, const Strategy &strat, State &state)
 Solve the eigenvalue problem prob from state with strat.
template<class Problem, class Strategy, class DominantState, class OppositeState>
auto mundy::solve_eigen_bounds (const Problem &prob, const Strategy &strat, DominantState &dominant_state, OppositeState &opposite_state)
 Both ends of the spectrum of a symmetric A via the shifted power method.

Detailed Description

The power method iterates q <- A q / ||A q|| from a caller-supplied start vector and reports the Rayleigh quotient lambda = q . A q of the unit iterate. It converges to the eigenvalue of largest magnitude at rate |lambda_2 / lambda_1| per iteration, provided the start vector has a component along its eigenvector.

The Lanczos method builds the tridiagonal T that A takes on the Krylov space of a caller-supplied start vector. T's extreme eigenvalues approach both ends of A's spectrum (of P A, preconditioned by an SPD P) from inside.