akreon-linalg
Fixed-size linear algebra and numerical methods in C++26.
Loading...
Searching...
No Matches
linalg::EigenDecomposition< Mat > Struct Template Reference

Computes eigenvalues and eigenvectors satisfying A V = V diag(lambda). More...

#include <eig_decomp.hpp>

Public Types

using T = matrix_scalar_t< Mat >
 
using Real = real_type_t< T >
 
using Complex = std::conditional_t< linalg::Complex< T >, T, std::complex< Real > >
 

Public Member Functions

constexpr EigenDecomposition (const Mat &A)
 Compute eigenvalues and eigenvectors using the nominal configuration.
 
constexpr EigenDecomposition (const Mat &A, const config::FactorConfig< Real > &config_in)
 Compute eigenvalues and eigenvectors with explicit settings.
 
constexpr auto spectral_radius () const
 Select the eigenvalue whose magnitude is the spectral radius.
 

Static Public Member Functions

static constexpr config::FactorConfig< Real > default_config ()
 Construct the nominal shifted-QR configuration.
 

Public Attributes

Vector< Complex, N > lambda
 eigendecomposition member variables
 
Matrix< Complex, N, N > V
 eigenvectors
 
bool converged {false}
 eigenvalue convergence flag
 

Static Public Attributes

static constexpr std::size_t N = mat_rows_v<Mat>
 

Detailed Description

template<SquareMatrix Mat>
struct linalg::EigenDecomposition< Mat >

Computes eigenvalues and eigenvectors satisfying A V = V diag(lambda).

Reduces A to Hessenberg form, applies shifted QR to obtain Schur form, then recovers eigenvectors in the original coordinates. Hermitian matrices use the accumulated orthonormal basis directly.

Template Parameters
MatSquare real or complex matrix type.

Definition at line 27 of file eig_decomp.hpp.

Member Typedef Documentation

◆ Complex

template<SquareMatrix Mat>
using linalg::EigenDecomposition< Mat >::Complex = std::conditional_t<linalg::Complex<T>, T, std::complex<Real> >

Definition at line 33 of file eig_decomp.hpp.

◆ Real

template<SquareMatrix Mat>
using linalg::EigenDecomposition< Mat >::Real = real_type_t<T>

Definition at line 32 of file eig_decomp.hpp.

◆ T

template<SquareMatrix Mat>
using linalg::EigenDecomposition< Mat >::T = matrix_scalar_t<Mat>

Definition at line 29 of file eig_decomp.hpp.

Constructor & Destructor Documentation

◆ EigenDecomposition() [1/2]

template<SquareMatrix Mat>
constexpr linalg::EigenDecomposition< Mat >::EigenDecomposition ( const Mat &  A)
inlineexplicitconstexpr

Compute eigenvalues and eigenvectors using the nominal configuration.

Parameters
[in]ASquare input matrix.

Definition at line 55 of file eig_decomp.hpp.

References linalg::mat_rows_v.

◆ EigenDecomposition() [2/2]

template<SquareMatrix Mat>
constexpr linalg::EigenDecomposition< Mat >::EigenDecomposition ( const Mat &  A,
const config::FactorConfig< Real > &  config_in 
)
inlineexplicitconstexpr

Compute eigenvalues and eigenvectors with explicit settings.

Parameters
[in]ASquare input matrix.
[in]config_inIteration budget, relative deflation tolerance, and normalization floor.

Definition at line 64 of file eig_decomp.hpp.

References linalg::mat_rows_v.

Member Function Documentation

◆ default_config()

template<SquareMatrix Mat>
static constexpr config::FactorConfig< Real > linalg::EigenDecomposition< Mat >::default_config ( )
inlinestaticconstexpr

Construct the nominal shifted-QR configuration.

Returns
FactorConfig<Real> with 256 steps, relative tol = 8*epsilon, and floor_eps = the smallest positive normal Real value.

Definition at line 43 of file eig_decomp.hpp.

References config::FactorConfig< T >::steps.

◆ spectral_radius()

template<SquareMatrix Mat>
constexpr auto linalg::EigenDecomposition< Mat >::spectral_radius ( ) const
inlineconstexpr

Select the eigenvalue whose magnitude is the spectral radius.

Returns
Complex eigenvalue with greatest magnitude; zero for a zero spectrum.

Definition at line 76 of file eig_decomp.hpp.

References linalg::constexpr_sqrt_safe(), linalg::EigenDecomposition< Mat >::lambda, linalg::mat_rows_v, and linalg::EigenDecomposition< Mat >::N.

Member Data Documentation

◆ converged

template<SquareMatrix Mat>
bool linalg::EigenDecomposition< Mat >::converged {false}

eigenvalue convergence flag

Definition at line 92 of file eig_decomp.hpp.

◆ lambda

template<SquareMatrix Mat>
Vector<Complex, N> linalg::EigenDecomposition< Mat >::lambda

eigendecomposition member variables

eigenvalues

Definition at line 90 of file eig_decomp.hpp.

Referenced by linalg::EigenDecomposition< Mat >::spectral_radius().

◆ N

template<SquareMatrix Mat>
constexpr std::size_t linalg::EigenDecomposition< Mat >::N = mat_rows_v<Mat>
staticconstexpr

Definition at line 35 of file eig_decomp.hpp.

Referenced by linalg::EigenDecomposition< Mat >::spectral_radius().

◆ V

template<SquareMatrix Mat>
Matrix<Complex, N, N> linalg::EigenDecomposition< Mat >::V

eigenvectors

Definition at line 91 of file eig_decomp.hpp.


The documentation for this struct was generated from the following file: