ampsci
High-precision calculations for one- and two-valence atomic systems
Solvers.hpp
1#pragma once
2#include "Matrix.hpp"
3#include "Vector.hpp"
4
5namespace LinAlg {
6
7//! Solves matrix equation Ax=b for x, for known square matrix A and vector b.
8template <typename T>
9Vector<T> solve_Axeqb(Matrix<T> Am, const Vector<T> &b);
10
11//! Solves Av = ev for eigenvalues e and eigenvectors v of symmetric/Hermetian
12//! matrix A. Returns [e,v], where v(i,j) is the jth element of the ith
13//! eigenvector corresponding to ith eigenvalue, e(i). e is always real.
14template <typename T>
15std::pair<Vector<double>, Matrix<T>> symmhEigensystem(Matrix<T> A);
16
17//! Solves Av=ev for first N eigenvals/vecs v of symmetric matrix A
18template <typename T>
19std::pair<Vector<double>, Matrix<T>> symmhEigensystem(Matrix<T> A, int number);
20
21//! Solves Av=ev for all eigenvals of symmetric matrix A below 'all_below'.
22//! Returns {N,e,V}: N is number of solutions
23template <typename T>
24std::tuple<int, Vector<double>, Matrix<T>> symmhEigensystem(Matrix<T> A,
25 double all_below);
26
27//! Solves Av = eBv for eigenvalues e and eigenvectors v of symmetric/Hermetian
28//! matrix pair A,B. Returns [e,v], where v(i,j) is the jth element of the ith
29//! eigenvector corresponding to ith eigenvalue, e(i). e is always real.
30template <typename T>
31std::pair<Vector<double>, Matrix<T>> symmhEigensystem(Matrix<T> A, Matrix<T> B);
32
33//! Solves Av = ev for eigenvalues e and eigenvectors v of non-symmetric real
34//! matrix A. Returns [e,v], where v(i,j) is the jth element of the ith
35//! eigenvector corresponding to ith eigenvalue, e(i). A must be real, while e
36//! and v are complex.
37template <typename T>
38std::pair<Vector<std::complex<double>>, Matrix<std::complex<double>>>
39genEigensystem(Matrix<T> A, bool sort);
40
41//==============================================================================
42//==============================================================================
43} // namespace LinAlg
44
45#include "Solvers.ipp"
Defines Matrix, Vector classes, and linear some algebra functions.
Definition Matrix.hpp:26
std::pair< Vector< std::complex< double > >, Matrix< std::complex< double > > > genEigensystem(Matrix< T > A, bool sort)
Solves Av = ev for eigenvalues e and eigenvectors v of non-symmetric real matrix A....
Definition Solvers.ipp:319
Vector< T > solve_Axeqb(Matrix< T > Am, const Vector< T > &b)
Solves matrix equation Ax=b for x, for known square matrix A and vector b.
Definition Solvers.ipp:36
std::pair< Vector< double >, Matrix< T > > symmhEigensystem(Matrix< T > A)
Solves Av = ev for eigenvalues e and eigenvectors v of symmetric/Hermetian matrix A....
Definition Solvers.ipp:70