Tridiagonal decomposition of a selfadjoint matrix. More...
Public Member Functions | |
template<typename InputType > | |
Tridiagonalization & | compute (const EigenBase< InputType > &matrix) |
Computes tridiagonal decomposition of given matrix. More... | |
DiagonalReturnType | diagonal () const |
Returns the diagonal of the tridiagonal matrix T in the decomposition. More... | |
CoeffVectorType | householderCoefficients () const |
Returns the Householder coefficients. More... | |
HouseholderSequenceType | matrixQ () const |
Returns the unitary matrix Q in the decomposition. More... | |
MatrixTReturnType | matrixT () const |
Returns an expression of the tridiagonal matrix T in the decomposition. More... | |
const MatrixType & | packedMatrix () const |
Returns the internal representation of the decomposition. More... | |
SubDiagonalReturnType | subDiagonal () const |
Returns the subdiagonal of the tridiagonal matrix T in the decomposition. More... | |
template<typename InputType > | |
Tridiagonalization (const EigenBase< InputType > &matrix) | |
Constructor; computes tridiagonal decomposition of given matrix. More... | |
Tridiagonalization (Index size=Size==Dynamic ? 2 :Size) | |
Default constructor. More... | |
Protected Attributes | |
CoeffVectorType | m_hCoeffs |
bool | m_isInitialized |
MatrixType | m_matrix |
Tridiagonal decomposition of a selfadjoint matrix.
This is defined in the Eigenvalues module.
MatrixType_ | the type of the matrix of which we are computing the tridiagonal decomposition; this is expected to be an instantiation of the Matrix class template. |
This class performs a tridiagonal decomposition of a selfadjoint matrix \( A \) such that: \( A = Q T Q^* \) where \( Q \) is unitary and \( T \) a real symmetric tridiagonal matrix.
A tridiagonal matrix is a matrix which has nonzero elements only on the main diagonal and the first diagonal below and above it. The Hessenberg decomposition of a selfadjoint matrix is in fact a tridiagonal decomposition. This class is used in SelfAdjointEigenSolver to compute the eigenvalues and eigenvectors of a selfadjoint matrix.
Call the function compute() to compute the tridiagonal decomposition of a given matrix. Alternatively, you can use the Tridiagonalization(const MatrixType&) constructor which computes the tridiagonal Schur decomposition at construction time. Once the decomposition is computed, you can use the matrixQ() and matrixT() functions to retrieve the matrices Q and T in the decomposition.
The documentation of Tridiagonalization(const MatrixType&) contains an example of the typical use of this class.
Definition at line 66 of file Tridiagonalization.h.
typedef Matrix<Scalar, SizeMinusOne, 1, Options & ~RowMajor, MaxSizeMinusOne, 1> Eigen::Tridiagonalization< MatrixType_ >::CoeffVectorType |
Definition at line 85 of file Tridiagonalization.h.
typedef std::conditional_t<NumTraits<Scalar>::IsComplex, internal::add_const_on_value_type_t<typename Diagonal<const MatrixType>::RealReturnType>, const Diagonal<const MatrixType> > Eigen::Tridiagonalization< MatrixType_ >::DiagonalReturnType |
Definition at line 94 of file Tridiagonalization.h.
typedef internal::plain_col_type<MatrixType, RealScalar>::type Eigen::Tridiagonalization< MatrixType_ >::DiagonalType |
Definition at line 86 of file Tridiagonalization.h.
typedef HouseholderSequence<MatrixType,internal::remove_all_t<typename CoeffVectorType::ConjugateReturnType> > Eigen::Tridiagonalization< MatrixType_ >::HouseholderSequenceType |
Return type of matrixQ()
Definition at line 102 of file Tridiagonalization.h.
typedef Eigen::Index Eigen::Tridiagonalization< MatrixType_ >::Index |
Definition at line 75 of file Tridiagonalization.h.
typedef internal::TridiagonalizationMatrixTReturnType<MatrixTypeRealView> Eigen::Tridiagonalization< MatrixType_ >::MatrixTReturnType |
Definition at line 89 of file Tridiagonalization.h.
typedef MatrixType_ Eigen::Tridiagonalization< MatrixType_ >::MatrixType |
Synonym for the template parameter MatrixType_
.
Definition at line 71 of file Tridiagonalization.h.
typedef internal::remove_all_t<typename MatrixType::RealReturnType> Eigen::Tridiagonalization< MatrixType_ >::MatrixTypeRealView |
Definition at line 88 of file Tridiagonalization.h.
typedef NumTraits<Scalar>::Real Eigen::Tridiagonalization< MatrixType_ >::RealScalar |
Definition at line 74 of file Tridiagonalization.h.
typedef MatrixType::Scalar Eigen::Tridiagonalization< MatrixType_ >::Scalar |
Definition at line 73 of file Tridiagonalization.h.
typedef std::conditional_t<NumTraits<Scalar>::IsComplex, internal::add_const_on_value_type_t<typename Diagonal<const MatrixType, -1>::RealReturnType>, const Diagonal<const MatrixType, -1> > Eigen::Tridiagonalization< MatrixType_ >::SubDiagonalReturnType |
Definition at line 99 of file Tridiagonalization.h.
typedef Matrix<RealScalar, SizeMinusOne, 1, Options & ~RowMajor, MaxSizeMinusOne, 1> Eigen::Tridiagonalization< MatrixType_ >::SubDiagonalType |
Definition at line 87 of file Tridiagonalization.h.
anonymous enum |
Enumerator | |
---|---|
Size | |
SizeMinusOne | |
Options | |
MaxSize | |
MaxSizeMinusOne |
Definition at line 77 of file Tridiagonalization.h.
|
inlineexplicit |
Default constructor.
[in] | size | Positive integer, size of the matrix whose tridiagonal decomposition will be computed. |
The default constructor is useful in cases in which the user intends to perform decompositions via compute(). The size
parameter is only used as a hint. It is not an error to give a wrong size
, but it may impair performance.
Definition at line 116 of file Tridiagonalization.h.
|
inlineexplicit |
Constructor; computes tridiagonal decomposition of given matrix.
[in] | matrix | Selfadjoint matrix whose tridiagonal decomposition is to be computed. |
This constructor calls compute() to compute the tridiagonal decomposition.
Example:
Output:
Here is a random symmetric 5x5 matrix: 1.36 -0.816 0.521 1.43 -0.144 -0.816 -0.659 0.794 -0.173 -0.406 0.521 0.794 -0.541 0.461 0.179 1.43 -0.173 0.461 -1.43 0.822 -0.144 -0.406 0.179 0.822 -1.37 The orthogonal matrix Q is: 1 0 0 0 0 0 -0.471 0.127 -0.671 -0.558 0 0.301 -0.195 0.437 -0.825 0 0.825 0.0459 -0.563 -0.00872 0 -0.0832 -0.971 -0.202 0.0922 The tridiagonal matrix T is: 1.36 1.73 0 0 0 1.73 -1.2 -0.966 0 0 0 -0.966 -1.28 0.214 0 0 0 0.214 -1.69 0.345 0 0 0 0.345 0.164 Q * T * Q^T = 1.36 -0.816 0.521 1.43 -0.144 -0.816 -0.659 0.794 -0.173 -0.406 0.521 0.794 -0.541 0.461 0.179 1.43 -0.173 0.461 -1.43 0.822 -0.144 -0.406 0.179 0.822 -1.37
Definition at line 133 of file Tridiagonalization.h.
|
inline |
Computes tridiagonal decomposition of given matrix.
[in] | matrix | Selfadjoint matrix whose tridiagonal decomposition is to be computed. |
*this
The tridiagonal decomposition is computed by bringing the columns of the matrix successively in the required form using Householder reflections. The cost is \( 4n^3/3 \) flops, where \( n \) denotes the size of the given matrix.
This method reuses of the allocated data in the Tridiagonalization object, if the size of the matrix does not change.
Example:
Output:
The matrix T in the tridiagonal decomposition of A is: 1.36 -0.704 0 0 -0.704 0.0147 1.71 0 0 1.71 0.856 0.641 0 0 0.641 -0.506 The matrix T in the tridiagonal decomposition of 2A is: 2.72 -1.41 0 0 -1.41 0.0294 3.43 0 0 3.43 1.71 1.28 0 0 1.28 -1.01
Definition at line 160 of file Tridiagonalization.h.
Tridiagonalization< MatrixType >::DiagonalReturnType Eigen::Tridiagonalization< MatrixType >::diagonal |
Returns the diagonal of the tridiagonal matrix T in the decomposition.
Example:
Output:
Here is a random self-adjoint 4x4 matrix: (-0.422,0) (0.705,-1.01) (-0.17,-0.552) (0.338,-0.357) (0.705,1.01) (0.515,0) (0.241,-0.446) (0.05,-1.64) (-0.17,0.552) (0.241,0.446) (-1.03,0) (0.0449,1.72) (0.338,0.357) (0.05,1.64) (0.0449,-1.72) (1.36,0) The tridiagonal matrix T is: -0.422 -1.45 0 0 -1.45 1.01 -1.42 0 0 -1.42 1.8 -1.2 0 0 -1.2 -1.96 We can also extract the diagonals of T directly ... The diagonal is: -0.422 1.01 1.8 -1.96 The subdiagonal is: -1.45 -1.42 -1.2
Definition at line 310 of file Tridiagonalization.h.
|
inline |
Returns the Householder coefficients.
The Householder coefficients allow the reconstruction of the matrix \( Q \) in the tridiagonal decomposition from the packed data.
Example:
Output:
Here is a random symmetric 4x4 matrix: 1.36 0.612 0.122 0.326 0.612 -1.21 -0.222 0.563 0.122 -0.222 -0.0904 1.16 0.326 0.563 1.16 1.66 The vector of Householder coefficients is: 1.87 1.24 0
Definition at line 185 of file Tridiagonalization.h.
|
inline |
Returns the unitary matrix Q in the decomposition.
This function returns a light-weight object of template class HouseholderSequence. You can either apply it directly to a matrix or you can convert it to a matrix of type MatrixType.
Definition at line 243 of file Tridiagonalization.h.
|
inline |
Returns an expression of the tridiagonal matrix T in the decomposition.
Currently, this function can be used to extract the matrix T from internal data and copy it to a dense matrix object. In most cases, it may be sufficient to directly use the packed matrix or the vector expressions returned by diagonal() and subDiagonal() instead of creating a new dense copy matrix with this function.
Definition at line 268 of file Tridiagonalization.h.
|
inline |
Returns the internal representation of the decomposition.
The returned matrix contains the following information:
See LAPACK for further details on this packed storage.
Example:
Output:
Here is a random symmetric 4x4 matrix: 1.36 0.612 0.122 0.326 0.612 -1.21 -0.222 0.563 0.122 -0.222 -0.0904 1.16 0.326 0.563 1.16 1.66 The packed matrix M is: 1.36 0.612 0.122 0.326 -0.704 0.0147 -0.222 0.563 0.0925 1.71 0.856 1.16 0.248 0.785 0.641 -0.506 The diagonal and subdiagonal corresponds to the matrix T, which is: 1.36 -0.704 0 0 -0.704 0.0147 1.71 0 0 1.71 0.856 0.641 0 0 0.641 -0.506
Definition at line 222 of file Tridiagonalization.h.
Tridiagonalization< MatrixType >::SubDiagonalReturnType Eigen::Tridiagonalization< MatrixType >::subDiagonal |
Returns the subdiagonal of the tridiagonal matrix T in the decomposition.
Definition at line 318 of file Tridiagonalization.h.
|
protected |
Definition at line 304 of file Tridiagonalization.h.
|
protected |
Definition at line 305 of file Tridiagonalization.h.
|
protected |
Definition at line 303 of file Tridiagonalization.h.