11#ifndef EIGEN_SELFADJOINTEIGENSOLVER_H
12#define EIGEN_SELFADJOINTEIGENSOLVER_H
18template<
typename _MatrixType>
19class GeneralizedSelfAdjointEigenSolver;
22template<
typename SolverType,
int Size,
bool IsComplex>
struct direct_selfadjoint_eigenvalues;
24template<
typename MatrixType,
typename DiagType,
typename SubDiagType>
82 Size = MatrixType::RowsAtCompileTime,
89 typedef typename MatrixType::Scalar
Scalar;
171 template<
typename InputType>
214 template<
typename InputType>
411template<
int StorageOrder,
typename RealScalar,
typename Scalar,
typename Index>
416template<
typename MatrixType>
417template<
typename InputType>
419SelfAdjointEigenSolver<MatrixType>& SelfAdjointEigenSolver<MatrixType>
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;
470template<
typename MatrixType>
479 if (computeEigenvectors)
481 m_eivec.setIdentity(diag.size(), diag.size());
485 m_isInitialized =
true;
486 m_eigenvectorsOk = computeEigenvectors;
502template<
typename MatrixType,
typename DiagType,
typename SubDiagType>
507 typedef typename MatrixType::Scalar
Scalar;
514 typedef typename DiagType::RealScalar
RealScalar;
542 if(iter > maxIterations *
n)
break;
545 while (start>0 &&
subdiag[start-1]!=0)
550 if (iter <= maxIterations *
n)
563 diag.segment(
i,
n-
i).minCoeff(&k);
579 {
eig.compute(
A,options); }
586 typedef typename SolverType::Scalar
Scalar;
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);
640 mat.diagonal().cwiseAbs().maxCoeff(&
i0);
660 &&
"invalid option parameter");
713 eivecs.col(l).normalize();
721 extract_kernel(
tmp,
eivecs.col(l), dummy);
734 solver.m_isInitialized =
true;
740template<
typename SolverType>
745 typedef typename SolverType::Scalar
Scalar;
767 &&
"invalid option parameter");
818 solver.m_isInitialized =
true;
825template<
typename MatrixType>
827SelfAdjointEigenSolver<MatrixType>& SelfAdjointEigenSolver<MatrixType>
837template<
int StorageOrder,
typename RealScalar,
typename Scalar,
typename Index>
858 mu -= e2 / (td + (td>
RealScalar(0) ? h : -h));
868 JacobiRotation<RealScalar>
rot;
869 rot.makeGivens(
x, z);
875 diag[k] =
rot.c() * (
rot.c() * diag[k] -
rot.s() * subdiag[k]) -
rot.s() * (
rot.c() * subdiag[k] -
rot.s() * diag[k+1]);
876 diag[k+1] =
rot.s() * sdk +
rot.c() * dkp1;
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];
894 Map<Matrix<Scalar,Dynamic,Dynamic,StorageOrder> >
q(matrixQ,
n,
n);
895 q.applyOnTheRight(k,k+1,
rot);
Matrix3f m
Definition AngleAxis_mimic_euler.cpp:1
BiCGSTAB< SparseMatrix< double > > solver
Definition BiCGSTAB_simple.cpp:5
int n
Definition BiCGSTAB_simple.cpp:1
int i
Definition BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
#define EIGEN_USING_STD(FUNC)
Definition Macros.h:1185
#define EIGEN_DEVICE_FUNC
Definition Macros.h:976
#define eigen_assert(x)
Definition Macros.h:1037
VectorXcd eivals
Definition MatrixBase_eigenvalues.cpp:2
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition PartialRedux_count.cpp:3
#define EIGEN_STATIC_ASSERT_NON_INTEGER(TYPE)
Definition StaticAssert.h:187
MatrixXf mat
Definition Tutorial_AdvancedInitialization_CommaTemporary.cpp:1
int rows
Definition Tutorial_commainit_02.cpp:1
int cols
Definition Tutorial_commainit_02.cpp:1
Scalar Scalar int size
Definition benchVecAdd.cpp:17
SCALAR Scalar
Definition bench_gemm.cpp:46
NumTraits< Scalar >::Real RealScalar
Definition bench_gemm.cpp:47
MatrixXf MatrixType
Definition benchmark-blocking-sizes.cpp:52
The matrix class, also used for vectors and row-vectors.
Definition Matrix.h:180
Computes eigenvalues and eigenvectors of selfadjoint matrices.
Definition SelfAdjointEigenSolver.h:77
MatrixType::Scalar Scalar
Scalar type for matrices of type _MatrixType.
Definition SelfAdjointEigenSolver.h:89
Matrix< Scalar, Size, Size, ColMajor, MaxColsAtCompileTime, MaxColsAtCompileTime > EigenvectorsType
Definition SelfAdjointEigenSolver.h:92
RealVectorType m_eivalues
Definition SelfAdjointEigenSolver.h:382
bool m_eigenvectorsOk
Definition SelfAdjointEigenSolver.h:387
TridiagonalizationType::CoeffVectorType m_hcoeffs
Definition SelfAdjointEigenSolver.h:384
SelfAdjointEigenSolver & computeFromTridiagonal(const RealVectorType &diag, const SubDiagonalType &subdiag, int options=ComputeEigenvectors)
Computes the eigen decomposition from a tridiagonal symmetric matrix.
Definition SelfAdjointEigenSolver.h:472
EIGEN_DEVICE_FUNC SelfAdjointEigenSolver & computeDirect(const MatrixType &matrix, int options=ComputeEigenvectors)
Computes eigendecomposition of given matrix using a closed-form algorithm.
Definition SelfAdjointEigenSolver.h:828
EigenvectorsType m_eivec
Definition SelfAdjointEigenSolver.h:381
EIGEN_DEVICE_FUNC ComputationInfo info() const
Reports whether previous computation was successful.
Definition SelfAdjointEigenSolver.h:361
EIGEN_DEVICE_FUNC MatrixType operatorSqrt() const
Computes the positive-definite square root of the matrix.
Definition SelfAdjointEigenSolver.h:324
TridiagonalizationType::SubDiagonalType m_subdiag
Definition SelfAdjointEigenSolver.h:383
NumTraits< Scalar >::Real RealScalar
Real scalar type for _MatrixType.
Definition SelfAdjointEigenSolver.h:100
EIGEN_DEVICE_FUNC MatrixType operatorInverseSqrt() const
Computes the inverse square root of the matrix.
Definition SelfAdjointEigenSolver.h:349
bool m_isInitialized
Definition SelfAdjointEigenSolver.h:386
ComputationInfo m_info
Definition SelfAdjointEigenSolver.h:385
Eigen::Index Index
Definition SelfAdjointEigenSolver.h:90
static const int m_maxIterations
Maximum number of iterations.
Definition SelfAdjointEigenSolver.h:372
EIGEN_DEVICE_FUNC const EigenvectorsType & eigenvectors() const
Returns the eigenvectors of given matrix.
Definition SelfAdjointEigenSolver.h:277
_MatrixType MatrixType
Definition SelfAdjointEigenSolver.h:80
@ Size
Definition SelfAdjointEigenSolver.h:82
@ Options
Definition SelfAdjointEigenSolver.h:84
@ ColsAtCompileTime
Definition SelfAdjointEigenSolver.h:83
@ MaxColsAtCompileTime
Definition SelfAdjointEigenSolver.h:85
static EIGEN_DEVICE_FUNC void check_template_parameters()
Definition SelfAdjointEigenSolver.h:376
EIGEN_DEVICE_FUNC SelfAdjointEigenSolver & compute(const EigenBase< InputType > &matrix, int options=ComputeEigenvectors)
Computes eigendecomposition of given matrix.
EIGEN_DEVICE_FUNC SelfAdjointEigenSolver(const EigenBase< InputType > &matrix, int options=ComputeEigenvectors)
Constructor; computes eigendecomposition of given matrix.
Definition SelfAdjointEigenSolver.h:173
EIGEN_DEVICE_FUNC const RealVectorType & eigenvalues() const
Returns the eigenvalues of given matrix.
Definition SelfAdjointEigenSolver.h:300
EIGEN_DEVICE_FUNC SelfAdjointEigenSolver(Index size)
Constructor, pre-allocates memory for dynamic-size matrices.
Definition SelfAdjointEigenSolver.h:147
Tridiagonal decomposition of a selfadjoint matrix.
Definition Tridiagonalization.h:65
Definition TensorRef.h:81
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition common.h:110
@ IsComplex
Definition common.h:98
#define abs(x)
Definition datatypes.h:17
void computeRoots(const Matrix &m, Roots &roots)
Definition eig33.cpp:49
SelfAdjointEigenSolver< PlainMatrixType > eig(mat, computeVectors?ComputeEigenvectors:EigenvaluesOnly)
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
Definition gnuplot_common_settings.hh:54
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
Definition gnuplot_common_settings.hh:12
ComputationInfo
Definition Constants.h:440
@ Success
Definition Constants.h:442
@ NoConvergence
Definition Constants.h:446
@ GenEigMask
Definition Constants.h:418
@ EigVecMask
Definition Constants.h:407
@ ComputeEigenvectors
Definition Constants.h:405
else if n * info
Definition cholesky.cpp:18
A triangularView< Lower >().adjoint().solveInPlace(B)
int EIGEN_BLAS_FUNC() rot(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy, RealScalar *pc, RealScalar *ps)
Definition level1_real_impl.h:79
EIGEN_DEVICE_FUNC void tridiagonalization_inplace(MatrixType &matA, CoeffVectorType &hCoeffs)
Definition Tridiagonalization.h:349
EIGEN_DEVICE_FUNC ComputationInfo computeFromTridiagonal_impl(DiagType &diag, SubDiagType &subdiag, const Index maxIterations, bool computeEigenvectors, MatrixType &eivec)
Definition SelfAdjointEigenSolver.h:504
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition MathFunctions.h:1091
EIGEN_STRONG_INLINE void swap(T &a, T &b)
Definition Meta.h:766
EIGEN_DEVICE_FUNC const Scalar & q
Definition SpecialFunctionsImpl.h:1984
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE internal::enable_if< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typenameNumTraits< T >::Real >::type abs(const T &x)
Definition MathFunctions.h:1509
EIGEN_DEVICE_FUNC bool abs2(bool x)
Definition MathFunctions.h:1292
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
const AutoDiffScalar< Matrix< typename internal::traits< typename internal::remove_all< DerTypeA >::type >::Scalar, Dynamic, 1 > > atan2(const AutoDiffScalar< DerTypeA > &a, const AutoDiffScalar< DerTypeB > &b)
Definition AutoDiffScalar.h:654
Definition BandTriangularSolver.h:13
Definition EigenBase.h:30
EIGEN_DEVICE_FUNC Derived & derived()
Definition EigenBase.h:46
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition NumTraits.h:233
static EIGEN_DEVICE_FUNC void computeRoots(const MatrixType &m, VectorType &roots)
Definition SelfAdjointEigenSolver.h:749
SolverType::Scalar Scalar
Definition SelfAdjointEigenSolver.h:745
SolverType::RealVectorType VectorType
Definition SelfAdjointEigenSolver.h:744
SolverType::EigenvectorsType EigenvectorsType
Definition SelfAdjointEigenSolver.h:746
SolverType::MatrixType MatrixType
Definition SelfAdjointEigenSolver.h:743
static EIGEN_DEVICE_FUNC void run(SolverType &solver, const MatrixType &mat, int options)
Definition SelfAdjointEigenSolver.h:759
SolverType::RealVectorType VectorType
Definition SelfAdjointEigenSolver.h:585
SolverType::Scalar Scalar
Definition SelfAdjointEigenSolver.h:586
SolverType::EigenvectorsType EigenvectorsType
Definition SelfAdjointEigenSolver.h:587
SolverType::MatrixType MatrixType
Definition SelfAdjointEigenSolver.h:584
static EIGEN_DEVICE_FUNC void run(SolverType &solver, const MatrixType &mat, int options)
Definition SelfAdjointEigenSolver.h:655
static EIGEN_DEVICE_FUNC void computeRoots(const MatrixType &m, VectorType &roots)
Definition SelfAdjointEigenSolver.h:595
static EIGEN_DEVICE_FUNC bool extract_kernel(MatrixType &mat, Ref< VectorType > res, Ref< VectorType > representative)
Definition SelfAdjointEigenSolver.h:634
Definition SelfAdjointEigenSolver.h:576
static EIGEN_DEVICE_FUNC void run(SolverType &eig, const typename SolverType::MatrixType &A, int options)
Definition SelfAdjointEigenSolver.h:578
Definition XprHelper.h:615
Definition ForwardDeclarations.h:17