Go to the documentation of this file.
   11 #ifndef EIGEN_SELFADJOINTEIGENSOLVER_H 
   12 #define EIGEN_SELFADJOINTEIGENSOLVER_H 
   18 template<
typename _MatrixType>
 
   19 class GeneralizedSelfAdjointEigenSolver;
 
   24 template<
typename MatrixType, 
typename DiagType, 
typename SubDiagType>
 
   82       Size = MatrixType::RowsAtCompileTime,
 
  171     template<
typename InputType>
 
  214     template<
typename InputType>
 
  411 template<
int StorageOrder,
typename RealScalar, 
typename Scalar, 
typename Index>
 
  416 template<
typename MatrixType>
 
  417 template<
typename InputType>
 
  422   check_template_parameters();
 
  430           && 
"invalid option parameter");
 
  433   m_eivalues.resize(
n,1);
 
  438     m_eivalues.coeffRef(0,0) = 
numext::real(m_eivec.coeff(0,0));
 
  439     if(computeEigenvectors)
 
  440       m_eivec.setOnes(
n,
n);
 
  442     m_isInitialized = 
true;
 
  443     m_eigenvectorsOk = computeEigenvectors;
 
  456   m_subdiag.resize(
n-1);
 
  457   m_hcoeffs.resize(
n-1);
 
  465   m_isInitialized = 
true;
 
  466   m_eigenvectorsOk = computeEigenvectors;
 
  470 template<
typename MatrixType>
 
  479   if (computeEigenvectors)
 
  481     m_eivec.setIdentity(
diag.size(), 
diag.size());
 
  485   m_isInitialized = 
true;
 
  486   m_eigenvectorsOk = computeEigenvectors;
 
  502 template<
typename MatrixType, 
typename DiagType, 
typename SubDiagType>
 
  525         const RealScalar scaled_subdiag = precision_inv * subdiag[
i];
 
  542     if(
iter > maxIterations * 
n) 
break;
 
  545     while (start>0 && subdiag[start-1]!=0)
 
  548     internal::tridiagonal_qr_step<MatrixType::Flags&RowMajorBit ? RowMajor : ColMajor>(
diag.data(), subdiag.data(), start, 
end, computeEigenvectors ? eivec.data() : (
Scalar*)0, 
n);
 
  550   if (
iter <= maxIterations * 
n)
 
  567         if(computeEigenvectors)
 
  568           eivec.col(
i).swap(eivec.col(
k+
i));
 
  575 template<
typename SolverType,
int Size,
bool IsComplex> 
struct direct_selfadjoint_eigenvalues
 
  607     Scalar c0 = 
m(0,0)*
m(1,1)*
m(2,2) + 
Scalar(2)*
m(1,0)*
m(2,0)*
m(2,1) - 
m(0,0)*
m(2,1)*
m(2,1) - 
m(1,1)*
m(2,0)*
m(2,0) - 
m(2,2)*
m(1,0)*
m(1,0);
 
  608     Scalar c1 = 
m(0,0)*
m(1,1) - 
m(1,0)*
m(1,0) + 
m(0,0)*
m(2,2) - 
m(2,0)*
m(2,0) + 
m(1,1)*
m(2,2) - 
m(2,1)*
m(2,1);
 
  619     Scalar q = a_over_3*a_over_3*a_over_3 - half_b*half_b;
 
  628     roots(0) = c2_over_3 - rho*(cos_theta + s_sqrt3*sin_theta); 
 
  629     roots(1) = c2_over_3 - rho*(cos_theta - s_sqrt3*sin_theta); 
 
  630     roots(2) = c2_over_3 + 
Scalar(2)*rho*cos_theta;
 
  640     mat.diagonal().cwiseAbs().maxCoeff(&
i0);
 
  643     representative = 
mat.col(
i0);
 
  646     n0 = (c0 = representative.cross(
mat.col((
i0+1)%3))).squaredNorm();
 
  647     n1 = (
c1 = representative.cross(
mat.col((
i0+2)%3))).squaredNorm();
 
  660             && 
"invalid option parameter");
 
  669     MatrixType scaledMat = 
mat.template selfadjointView<Lower>();
 
  670     scaledMat.diagonal().array() -= shift;
 
  678     if(computeEigenvectors)
 
  683         eivecs.setIdentity();
 
  702           tmp.diagonal().array () -= 
eivals(
k);
 
  704           extract_kernel(tmp, eivecs.col(
k), eivecs.col(
l));
 
  712           eivecs.col(
l) -= eivecs.col(
k).dot(eivecs.col(
l))*eivecs.col(
l);
 
  713           eivecs.col(
l).normalize();
 
  718           tmp.diagonal().array () -= 
eivals(
l);
 
  721           extract_kernel(tmp, eivecs.col(
l), 
dummy);
 
  725         eivecs.col(1) = eivecs.col(2).cross(eivecs.col(0)).normalized();
 
  734     solver.m_isInitialized = 
true;
 
  735     solver.m_eigenvectorsOk = computeEigenvectors;
 
  740 template<
typename SolverType> 
 
  767             && 
"invalid option parameter");
 
  776     scaledMat.coeffRef(0,1) = 
mat.coeff(1,0);
 
  777     scaledMat.diagonal().array() -= shift;
 
  786     if(computeEigenvectors)
 
  790         eivecs.setIdentity();
 
  794         scaledMat.diagonal().array () -= 
eivals(1);
 
  800           eivecs.col(1) << -scaledMat(1,0), scaledMat(0,0);
 
  805           eivecs.col(1) << -scaledMat(1,1), scaledMat(1,0);
 
  809         eivecs.col(0) << eivecs.col(1).unitOrthogonal();
 
  818     solver.m_isInitialized = 
true;
 
  819     solver.m_eigenvectorsOk = computeEigenvectors;
 
  825 template<
typename MatrixType>
 
  837 template<
int StorageOrder,
typename RealScalar, 
typename Scalar, 
typename Index>
 
  869     rot.makeGivens(
x, 
z);
 
  877     subdiag[
k] = 
rot.c() * sdk - 
rot.s() * dkp1;
 
  880       subdiag[
k - 1] = 
rot.c() * subdiag[
k-1] - 
rot.s() * 
z;
 
  886       z = -
rot.s() * subdiag[
k+1];
 
  887       subdiag[
k + 1] = 
rot.c() * subdiag[
k+1];
 
  895       q.applyOnTheRight(
k,
k+1,
rot);
 
  904 #endif // EIGEN_SELFADJOINTEIGENSOLVER_H 
  
EIGEN_DEVICE_FUNC SelfAdjointEigenSolver & computeDirect(const MatrixType &matrix, int options=ComputeEigenvectors)
Computes eigendecomposition of given matrix using a closed-form algorithm.
#define EIGEN_DEVICE_FUNC
Namespace containing all symbols from the Eigen library.
SolverType::EigenvectorsType EigenvectorsType
static EIGEN_DEVICE_FUNC void run(SolverType &eig, const typename SolverType::MatrixType &A, int options)
EIGEN_DEVICE_FUNC Derived & derived()
const AutoDiffScalar< Matrix< typename internal::traits< typename internal::remove_all< DerTypeA >::type >::Scalar, Dynamic, 1 > > atan2(const AutoDiffScalar< DerTypeA > &a, const AutoDiffScalar< DerTypeB > &b)
Tridiagonal decomposition of a selfadjoint matrix.
#define EIGEN_USING_STD(FUNC)
Array< double, 1, 3 > e(1./3., 0.5, 2.)
SolverType::EigenvectorsType EigenvectorsType
Jet< T, N > sin(const Jet< T, N > &f)
SolverType::Scalar Scalar
SelfAdjointEigenSolver & computeFromTridiagonal(const RealVectorType &diag, const SubDiagonalType &subdiag, int options=ComputeEigenvectors)
Computes the eigen decomposition from a tridiagonal symmetric matrix.
static EIGEN_DEVICE_FUNC void computeRoots(const MatrixType &m, VectorType &roots)
EIGEN_DEVICE_FUNC ComputationInfo computeFromTridiagonal_impl(DiagType &diag, SubDiagType &subdiag, const Index maxIterations, bool computeEigenvectors, MatrixType &eivec)
Matrix diag(const std::vector< Matrix > &Hs)
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
SolverType::RealVectorType VectorType
NumTraits< Scalar >::Real RealScalar
Real scalar type for _MatrixType.
TridiagonalizationType::SubDiagonalType SubDiagonalType
EIGEN_DEVICE_FUNC SelfAdjointEigenSolver & compute(const EigenBase< InputType > &matrix, int options=ComputeEigenvectors)
Computes eigendecomposition of given matrix.
const EIGEN_DEVICE_FUNC RealVectorType & eigenvalues() const
Returns the eigenvalues of given matrix.
SolverType::Scalar Scalar
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Rotation given by a cosine-sine pair.
static EIGEN_DEVICE_FUNC void check_template_parameters()
int EIGEN_BLAS_FUNC() rot(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar *pc, RealScalar *ps)
BiCGSTAB< SparseMatrix< double > > solver
TridiagonalizationType::SubDiagonalType m_subdiag
Jet< T, N > cos(const Jet< T, N > &f)
SolverType::RealVectorType VectorType
EIGEN_DEVICE_FUNC ComputationInfo info() const
Reports whether previous computation was successful.
static EIGEN_DEVICE_FUNC void run(SolverType &solver, const MatrixType &mat, int options)
internal::plain_col_type< MatrixType, RealScalar >::type RealVectorType
Type for vector of eigenvalues as returned by eigenvalues().
SolverType::MatrixType MatrixType
Matrix< Scalar, Size, Size, ColMajor, MaxColsAtCompileTime, MaxColsAtCompileTime > EigenvectorsType
const EIGEN_DEVICE_FUNC EigenvectorsType & eigenvectors() const
Returns the eigenvectors of given matrix.
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set set xzeroaxis lt lw set x2zeroaxis lt lw set yzeroaxis lt lw set y2zeroaxis lt lw set tics in set ticslevel set tics scale
Computes eigenvalues and eigenvectors of selfadjoint matrices.
EIGEN_DEVICE_FUNC const Scalar & q
static const Line3 l(Rot3(), 1, 1)
EIGEN_DEVICE_FUNC MatrixType operatorInverseSqrt() const
Computes the inverse square root of the matrix.
SelfAdjointEigenSolver< PlainMatrixType > eig(mat, computeVectors?ComputeEigenvectors:EigenvaluesOnly)
A matrix or vector expression mapping an existing array of data.
TridiagonalizationType::CoeffVectorType m_hcoeffs
EIGEN_DEVICE_FUNC void tridiagonalization_inplace(MatrixType &matA, CoeffVectorType &hCoeffs)
SolverType::MatrixType MatrixType
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
NumTraits< Scalar >::Real RealScalar
EIGEN_DEVICE_FUNC MatrixType operatorSqrt() const
Computes the positive-definite square root of the matrix.
EIGEN_DEVICE_FUNC bool abs2(bool x)
A matrix or vector expression mapping an existing expression.
EIGEN_STRONG_INLINE void swap(T &a, T &b)
static EIGEN_DEVICE_FUNC bool extract_kernel(MatrixType &mat, Ref< VectorType > res, Ref< VectorType > representative)
iterator iter(handle obj)
EIGEN_DEVICE_FUNC SelfAdjointEigenSolver(Index size)
Constructor, pre-allocates memory for dynamic-size matrices.
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE internal::enable_if< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typename NumTraits< T >::Real >::type abs(const T &x)
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
static const int m_maxIterations
Maximum number of iterations.
static const EIGEN_DEPRECATED end_t end
static EIGEN_DEVICE_FUNC void run(SolverType &solver, const MatrixType &mat, int options)
A triangularView< Lower >().adjoint().solveInPlace(B)
EIGEN_DEVICE_FUNC SelfAdjointEigenSolver(const EigenBase< InputType > &matrix, int options=ComputeEigenvectors)
Constructor; computes eigendecomposition of given matrix.
static EIGEN_DEVICE_FUNC void tridiagonal_qr_step(RealScalar *diag, RealScalar *subdiag, Index start, Index end, Scalar *matrixQ, Index n)
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Jet< T, N > sqrt(const Jet< T, N > &f)
static constexpr double k
RealVectorType m_eivalues
void computeRoots(const Matrix &m, Roots &roots)
MatrixType::Scalar Scalar
Scalar type for matrices of type _MatrixType.
static EIGEN_DEVICE_FUNC void computeRoots(const MatrixType &m, VectorType &roots)
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
#define EIGEN_STATIC_ASSERT_NON_INTEGER(TYPE)
gtsam
Author(s): 
autogenerated on Wed May 28 2025 03:03:02