nk 1.0.0
C++ Numerical Computing Runtime
Loading...
Searching...
No Matches
eig.hpp
Go to the documentation of this file.
1
3// toolboxes/linalg/include/nk/linalg/eig.hpp
4//
5// Eigenvalue family — symmetric & general eig, Hessenberg reduction,
6// symmetric Schur, characteristic polynomial, Sylvester equation.
7// Migrated from toolboxes/builtin/src/language/arrays/matrix.cpp.
8
9#pragma once
10
11#include <memory_resource>
12#include <tuple>
13#include <nk/value/value.hpp>
14
15namespace nk::linalg {
16
19
20
26std::tuple<Value, Value>
27eig_symmetric(const Value &A, std::pmr::memory_resource *mr = nullptr);
28
30Value eig_values(const Value &A, std::pmr::memory_resource *mr = nullptr);
31
38bool isSymmetricApprox(const Value &A, double tol);
39
43Value poly_of_matrix(const Value &A, std::pmr::memory_resource *mr = nullptr);
44
48Value eig_general_values(const Value &A, std::pmr::memory_resource *mr = nullptr);
49
54std::tuple<Value, Value>
55eig_general_VD(const Value &A, std::pmr::memory_resource *mr = nullptr);
56
60std::tuple<Value, Value>
61hess(const Value &A, std::pmr::memory_resource *mr = nullptr);
62
64Value hess_H_only(const Value &A, std::pmr::memory_resource *mr = nullptr);
65
69std::tuple<Value, Value>
70schur_sym(const Value &A, std::pmr::memory_resource *mr = nullptr);
71
80std::tuple<Value, Value>
81schur_general(const Value &A, std::pmr::memory_resource *mr = nullptr);
82
86Value sylvester_sym(const Value &A, const Value &B, const Value &C,
87 std::pmr::memory_resource *mr = nullptr);
88
112Value polyeig_values(Span<const Value> coeffs, std::pmr::memory_resource *mr = nullptr);
113
118std::tuple<Value, Value>
119polyeig_VE(Span<const Value> coeffs, std::pmr::memory_resource *mr = nullptr);
120
133Value ordeig(const Value &T, std::pmr::memory_resource *mr = nullptr);
134
135
137} // namespace nk::linalg
Core MATLAB-compatible multidimensional array and scalar value type.
Definition value.hpp:61
std::tuple< Value, Value > eig_general_VD(const Value &A, std::pmr::memory_resource *mr=nullptr)
General [V, D] eig for real-eigenvalue asymmetric A.
Value ordeig(const Value &T, std::pmr::memory_resource *mr=nullptr)
Eigenvalues from a (quasi-)triangular Schur factor (e = ordeig(T)).
std::tuple< Value, Value > eig_symmetric(const Value &A, std::pmr::memory_resource *mr=nullptr)
Symmetric eigendecomposition ([V, D] = eig(A)).
std::tuple< Value, Value > schur_general(const Value &A, std::pmr::memory_resource *mr=nullptr)
Real Schur decomposition for general (nonsymmetric) A ([U, T] = schur(A)).
std::tuple< Value, Value > hess(const Value &A, std::pmr::memory_resource *mr=nullptr)
Hessenberg reduction ([P, H] = hess(A)).
Value eig_general_values(const Value &A, std::pmr::memory_resource *mr=nullptr)
General (non-symmetric) eigenvalues via characteristic polynomial.
std::tuple< Value, Value > schur_sym(const Value &A, std::pmr::memory_resource *mr=nullptr)
Schur decomposition for symmetric A ([U, T] = schur(A)).
bool isSymmetricApprox(const Value &A, double tol)
Approximate-symmetry test used to pick the symmetric (Jacobi) vs general (char-poly) eig path.
Value polyeig_values(Span< const Value > coeffs, std::pmr::memory_resource *mr=nullptr)
Polynomial eigenvalue problem (e = polyeig(A0, A1, ..., Ak), possibly [V, e]).
Value poly_of_matrix(const Value &A, std::pmr::memory_resource *mr=nullptr)
Characteristic polynomial of a matrix (p = poly(A)).
Value eig_values(const Value &A, std::pmr::memory_resource *mr=nullptr)
Eigenvalues only (e = eig(A) single-output form, symmetric).
std::tuple< Value, Value > polyeig_VE(Span< const Value > coeffs, std::pmr::memory_resource *mr=nullptr)
Polynomial eigenvalue problem, eigenvectors + eigenvalues ([V, e] = polyeig(A0, .....
Value sylvester_sym(const Value &A, const Value &B, const Value &C, std::pmr::memory_resource *mr=nullptr)
Sylvester equation for symmetric A and B (X = sylvester_sym(A, B, C)).
Value hess_H_only(const Value &A, std::pmr::memory_resource *mr=nullptr)
Hessenberg-only output (H = hess(A) single-output form).