Skip to content

num::eig_sym

Defined in header <linear/eigen/jacobi_eig.hpp>

eigen_result eig_sym(const with_law<mat<real>, law::self_adjoint> &A, real tol = 1e-12,
                     idx max_sweeps = 100);  // (1)

template <class M>
requires matrix_space<M> && (!claims<M, law::self_adjoint>)
eigen_result eig_sym(const M & /*untagged*/, real = 1e-12, idx = 100);  // (2)

(1) Compute full symmetric eigendecomposition \(A = V \Lambda V^T\), with sorted eigenvalues and orthonormal eigenvector columns.

Uses LAPACK dsyevd when configured, else OpenMP or sequential cyclic Jacobi. Call num::lapack::eig_sym, num::omp::eig_sym or num::seq::eig_sym to force one.

(2) Rejects an untagged matrix at compile time.

Parameters

  • A: Symmetric matrix, e.g. num::assume_symmetric(A).
  • tol: Jacobi tolerance on \(\sum_{i \ne j} A_{ij}^2\); LAPACK ignores it.
  • max_sweeps: Maximum Jacobi sweeps (default: 100); LAPACK ignores it.

Return value

eigen_result containing sorted eigenvalues, column eigenvector matrix, sweep count, and convergence status.

See also

assume_symmetric, make_symmetric, lanczos, power_iteration