11 #ifndef EIGEN_EIGENSOLVER_H    12 #define EIGEN_EIGENSOLVER_H    80     typedef typename MatrixType::Scalar 
Scalar;
    82     typedef typename MatrixType::Index 
Index;
   146     EigenSolver(
const MatrixType& matrix, 
bool computeEigenvectors = 
true)
   147       : 
m_eivec(matrix.rows(), matrix.cols()),
   152         m_matT(matrix.rows(), matrix.cols()), 
   155       compute(matrix, computeEigenvectors);
   312 template<
typename MatrixType>
   318   for (
Index i=0; i<n; ++i)
   332 template<
typename MatrixType>
   339   for (
Index j=0; j<n; ++j)
   344       matV.col(j) = 
m_eivec.col(j).template cast<ComplexScalar>();
   345       matV.col(j).normalize();
   350       for (
Index i=0; i<n; ++i)
   355       matV.col(j).normalize();
   356       matV.col(j+1).normalize();
   363 template<
typename MatrixType>
   377     if (computeEigenvectors)
   383     while (i < matrix.cols()) 
   385       if (i == matrix.cols() - 1 || 
m_matT.coeff(i+1, i) == 
Scalar(0)) 
   401     if (computeEigenvectors)
   412 template<
typename Scalar>
   421       return std::complex<Scalar>((xr + r*xi)/d, (xi - r*xr)/d);
   427       return std::complex<Scalar>((r*xr + xi)/d, (r*xi - xr)/d);
   432 template<
typename MatrixType>
   441   for (
Index j = 0; j < size; ++j)
   443     norm += 
m_matT.row(j).segment((std::max)(j-1,
Index(0)), size-(std::max)(j-1,
Index(0))).cwiseAbs().sum();
   452   for (
Index n = size-1; n >= 0; n--)
   460       Scalar lastr(0), lastw(0);
   463       m_matT.coeffRef(n,n) = 1.0;
   464       for (
Index i = n-1; i >= 0; i--)
   480               m_matT.coeffRef(i,n) = -r / w;
   482               m_matT.coeffRef(i,n) = -r / (eps * norm);
   489             Scalar t = (x * lastr - lastw * r) / denom;
   492               m_matT.coeffRef(i+1,n) = (-r - w * t) / x;
   494               m_matT.coeffRef(i+1,n) = (-lastr - y * t) / lastw;
   499           if ((eps * t) * t > 
Scalar(1))
   500             m_matT.col(n).tail(size-i) /= t;
   504     else if (q < 
Scalar(0) && n > 0) 
   506       Scalar lastra(0), lastsa(0), lastw(0);
   517         std::complex<Scalar> cc = cdiv<Scalar>(0.0,-
m_matT.coeff(n-1,n),
m_matT.coeff(n-1,n-1)-p,q);
   521       m_matT.coeffRef(n,n-1) = 0.0;
   522       m_matT.coeffRef(n,n) = 1.0;
   523       for (
Index i = n-2; i >= 0; i--)
   540             std::complex<Scalar> cc = 
cdiv(-ra,-sa,w,q);
   551             if ((vr == 0.0) && (vi == 0.0))
   554             std::complex<Scalar> cc = 
cdiv(x*lastra-lastw*ra+q*sa,x*lastsa-lastw*sa-q*ra,vr,vi);
   559               m_matT.coeffRef(i+1,n-1) = (-ra - w * 
m_matT.coeff(i,n-1) + q * 
m_matT.coeff(i,n)) / x;
   564               cc = 
cdiv(-lastra-y*
m_matT.coeff(i,n-1),-lastsa-y*
m_matT.coeff(i,n),lastw,q);
   573           if ((eps * t) * t > 
Scalar(1))
   574             m_matT.block(i, n-1, size-i, 2) /= t;
   589   for (
Index j = size-1; j >= 0; j--)
   598 #endif // EIGEN_EIGENSOLVER_H 
Matrix< ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime > EigenvectorsType
Type for matrix of eigenvectors as returned by eigenvectors(). 
EigenvectorsType eigenvectors() const 
Returns the eigenvectors of given matrix. 
EigenSolver(Index size)
Default constructor with memory preallocation. 
std::complex< Scalar > cdiv(const Scalar &xr, const Scalar &xi, const Scalar &yr, const Scalar &yi)
const MatrixType & matrixU() const 
Returns the orthogonal matrix in the Schur decomposition. 
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
Index getMaxIterations()
Returns the maximum number of iterations. 
ComputationInfo info() const 
Reports whether previous computation was successful. 
bool isMuchSmallerThan(const Scalar &x, const OtherScalar &y, typename NumTraits< Scalar >::Real precision=NumTraits< Scalar >::dummy_precision())
ComputationInfo info() const 
const MatrixType & matrixT() const 
Returns the quasi-triangular matrix in the Schur decomposition. 
RealSchur< MatrixType > m_realSchur
const ImagReturnType imag() const 
EigenSolver(const MatrixType &matrix, bool computeEigenvectors=true)
Constructor; computes eigendecomposition of given matrix. 
Index getMaxIterations()
Returns the maximum number of iterations. 
Matrix< Scalar, ColsAtCompileTime, 1, Options &~RowMajor, MaxColsAtCompileTime, 1 > ColumnVectorType
EIGEN_STRONG_INLINE Index rows() const 
EIGEN_STRONG_INLINE const CwiseUnaryOp< internal::scalar_abs_op< Scalar >, const Derived > abs() const 
RealReturnType real() const 
MatrixType pseudoEigenvalueMatrix() const 
Returns the block-diagonal matrix in the pseudo-eigendecomposition. 
NumTraits< Scalar >::Real RealScalar
EIGEN_STRONG_INLINE const Scalar & coeff(Index rowId, Index colId) const 
const MatrixType & pseudoEigenvectors() const 
Returns the pseudo-eigenvectors of given matrix. 
EIGEN_STRONG_INLINE Scalar & coeffRef(Index rowId, Index colId)
EIGEN_STRONG_INLINE void resize(Index nbRows, Index nbCols)
TFSIMD_FORCE_INLINE const tfScalar & x() const 
EigenSolver & setMaxIterations(Index maxIters)
Sets the maximum number of iterations allowed. 
std::complex< RealScalar > ComplexScalar
Complex scalar type for MatrixType. 
RealSchur & compute(const MatrixType &matrix, bool computeU=true)
Computes Schur decomposition of given matrix. 
_MatrixType MatrixType
Synonym for the template parameter _MatrixType. 
TFSIMD_FORCE_INLINE const tfScalar & z() const 
EigenSolver()
Default constructor. 
TFSIMD_FORCE_INLINE const tfScalar & w() const 
RealSchur & setMaxIterations(Index maxIters)
Sets the maximum number of iterations allowed. 
void doComputeEigenvectors()
MatrixType::Scalar Scalar
Scalar type for matrices of type MatrixType. 
const CwiseUnaryOp< internal::scalar_sqrt_op< Scalar >, const Derived > sqrt() const 
Computes eigenvalues and eigenvectors of general matrices. 
EigenvalueType m_eivalues
const EigenvalueType & eigenvalues() const 
Returns the eigenvalues of given matrix. 
Matrix< ComplexScalar, ColsAtCompileTime, 1, Options &~RowMajor, MaxColsAtCompileTime, 1 > EigenvalueType
Type for vector of eigenvalues as returned by eigenvalues(). 
EigenSolver & compute(const MatrixType &matrix, bool computeEigenvectors=true)
Computes eigendecomposition of given matrix.