RitzPairs.h
Go to the documentation of this file.
1 // Copyright (C) 2020 Netherlands eScience Center <n.renauld@esciencecenter.nl>
2 //
3 // This Source Code Form is subject to the terms of the Mozilla
4 // Public License v. 2.0. If a copy of the MPL was not distributed
5 // with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
6 
7 #ifndef SPECTRA_RITZ_PAIRS_H
8 #define SPECTRA_RITZ_PAIRS_H
9 
10 #include <Eigen/Core>
11 #include <Eigen/Eigenvalues>
12 
13 #include "../Util/SelectionRule.h"
14 
15 namespace Spectra {
16 
17 template <typename Scalar>
19 
22 template <typename Scalar>
23 class RitzPairs
24 {
25 private:
31 
32  Vector m_values; // eigenvalues
33  Matrix m_small_vectors; // eigenvectors of the small problem, makes restart cheaper.
34  Matrix m_vectors; // Ritz (or harmonic Ritz) eigenvectors
35  Matrix m_residues; // residues of the pairs
37 
38 public:
39  RitzPairs() = default;
40 
46 
50  Index size() const { return m_values.size(); }
51 
55  void sort(SortRule selection)
56  {
57  std::vector<Index> ind = argsort(selection, m_values);
58  RitzPairs<Scalar> temp = *this;
59  for (Index i = 0; i < size(); i++)
60  {
61  m_values[i] = temp.m_values[ind[i]];
62  m_vectors.col(i) = temp.m_vectors.col(ind[i]);
63  m_residues.col(i) = temp.m_residues.col(ind[i]);
64  m_small_vectors.col(i) = temp.m_small_vectors.col(ind[i]);
65  }
66  }
67 
73  bool check_convergence(Scalar tol, Index number_eigenvalues)
74  {
75  const Array norms = m_residues.colwise().norm();
76  bool converged = true;
77  m_root_converged = BoolArray::Zero(norms.size());
78  for (Index j = 0; j < norms.size(); j++)
79  {
80  m_root_converged[j] = (norms[j] < tol);
81  if (j < number_eigenvalues)
82  {
83  converged &= (norms[j] < tol);
84  }
85  }
86  return converged;
87  }
88 
89  const Matrix& ritz_vectors() const { return m_vectors; }
90  const Vector& ritz_values() const { return m_values; }
91  const Matrix& small_ritz_vectors() const { return m_small_vectors; }
92  const Matrix& residues() const { return m_residues; }
94 };
95 
96 } // namespace Spectra
97 
98 #include "SearchSpace.h"
99 
100 namespace Spectra {
101 
106 template <typename Scalar>
108 {
109  const Matrix& basis_vectors = search_space.basis_vectors();
110  const Matrix& op_basis_prod = search_space.operator_basis_product();
111 
112  // Form the small eigenvalue
113  Matrix small_matrix = basis_vectors.transpose() * op_basis_prod;
114 
115  // Small eigenvalue problem
116  Eigen::SelfAdjointEigenSolver<Matrix> eigen_solver(small_matrix);
117  m_values = eigen_solver.eigenvalues();
118  m_small_vectors = eigen_solver.eigenvectors();
119 
120  // Ritz vectors
121  m_vectors = basis_vectors * m_small_vectors;
122 
123  // Residues
124  m_residues = op_basis_prod * m_small_vectors - m_vectors * m_values.asDiagonal();
125  return eigen_solver.info();
126 }
127 
128 } // namespace Spectra
129 
130 #endif // SPECTRA_RITZ_PAIRS_H
ind
std::vector< int > ind
Definition: Slicing_stdvector_cxx11.cpp:1
Spectra::SearchSpace::operator_basis_product
const Matrix & operator_basis_product() const
Returns the operator applied to basis vector.
Definition: SearchSpace.h:91
Spectra::SearchSpace::basis_vectors
const Matrix & basis_vectors() const
Returns the basis vectors.
Definition: SearchSpace.h:88
Spectra::RitzPairs::m_residues
Matrix m_residues
Definition: RitzPairs.h:35
Eigen::Array
General-purpose arrays with easy API for coefficient-wise operations.
Definition: Array.h:45
Eigen::SelfAdjointEigenSolver::eigenvalues
const EIGEN_DEVICE_FUNC RealVectorType & eigenvalues() const
Returns the eigenvalues of given matrix.
Definition: SelfAdjointEigenSolver.h:300
Spectra::SearchSpace
Definition: RitzPairs.h:18
Spectra::RitzPairs::sort
void sort(SortRule selection)
Definition: RitzPairs.h:55
Spectra::RitzPairs::m_root_converged
BoolArray m_root_converged
Definition: RitzPairs.h:36
Spectra::RitzPairs::converged_eigenvalues
const BoolArray & converged_eigenvalues() const
Definition: RitzPairs.h:93
Eigen::SelfAdjointEigenSolver::info
EIGEN_DEVICE_FUNC ComputationInfo info() const
Reports whether previous computation was successful.
Definition: SelfAdjointEigenSolver.h:361
Spectra::RitzPairs::ritz_vectors
const Matrix & ritz_vectors() const
Definition: RitzPairs.h:89
Eigen::SelfAdjointEigenSolver::eigenvectors
const EIGEN_DEVICE_FUNC EigenvectorsType & eigenvectors() const
Returns the eigenvectors of given matrix.
Definition: SelfAdjointEigenSolver.h:277
Spectra::RitzPairs::small_ritz_vectors
const Matrix & small_ritz_vectors() const
Definition: RitzPairs.h:91
j
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2
Eigen::SelfAdjointEigenSolver
Computes eigenvalues and eigenvectors of selfadjoint matrices.
Definition: SelfAdjointEigenSolver.h:76
Spectra::RitzPairs
Definition: RitzPairs.h:23
SearchSpace.h
Spectra::RitzPairs::compute_eigen_pairs
Eigen::ComputationInfo compute_eigen_pairs(const SearchSpace< Scalar > &search_space)
Definition: RitzPairs.h:107
Spectra::RitzPairs::RitzPairs
RitzPairs()=default
Spectra::SortRule
SortRule
Definition: SelectionRule.h:33
Spectra::RitzPairs::Index
Eigen::Index Index
Definition: RitzPairs.h:26
Spectra
Definition: LOBPCGSolver.h:19
gtsam::tol
const G double tol
Definition: Group.h:79
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic >
Spectra::RitzPairs::residues
const Matrix & residues() const
Definition: RitzPairs.h:92
Eigen::ComputationInfo
ComputationInfo
Definition: Constants.h:440
Spectra::RitzPairs::m_small_vectors
Matrix m_small_vectors
Definition: RitzPairs.h:33
Spectra::RitzPairs::ritz_values
const Vector & ritz_values() const
Definition: RitzPairs.h:90
Spectra::RitzPairs::check_convergence
bool check_convergence(Scalar tol, Index number_eigenvalues)
Definition: RitzPairs.h:73
Spectra::RitzPairs::size
Index size() const
Definition: RitzPairs.h:50
i
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Spectra::RitzPairs::m_vectors
Matrix m_vectors
Definition: RitzPairs.h:34
Spectra::RitzPairs::m_values
Vector m_values
Definition: RitzPairs.h:32
Scalar
SCALAR Scalar
Definition: bench_gemm.cpp:46
Eigen::Index
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74


gtsam
Author(s):
autogenerated on Thu Apr 10 2025 03:03:07