Class xlifepp::Tridiagonalization#
-
template<typename _MatrixType>
class Tridiagonalization#
-
Collaboration diagram for xlifepp::Tridiagonalization:
Tridiagonal decomposition of a selfadjoint matrix.
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.
- Template Parameters:
-
_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.
Public Types
-
typedef HouseholderSequence<MatrixType, CoeffVectorType>::ConjugateReturnType HouseholderSequenceType#
-
Return type of matrixQ()
-
typedef _MatrixType MatrixType#
-
Synonym for the template parameter
_MatrixType
.
Public Functions
-
inline Tridiagonalization(const MatrixType &matrix)#
-
Constructor; computes tridiagonal decomposition of given matrix.
This constructor calls compute() to compute the tridiagonal decomposition.
- Parameters:
-
matrix – [in] Selfadjoint matrix whose tridiagonal decomposition is to be computed.
-
inline Tridiagonalization(dimen_t size)#
-
Default constructor.
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 wrongsize
, but it may impair performance.See also
compute() for an example.
- Parameters:
-
size – [in] Positive integer, size of the matrix whose tridiagonal decomposition will be computed.
-
inline Tridiagonalization &compute(const MatrixType &matrix)#
-
Computes tridiagonal decomposition of given matrix.
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: \include test_EigenSolverDecomposition.cpp
- Parameters:
-
matrix – [in] Selfadjoint matrix whose tridiagonal decomposition is to be computed.
- Returns:
-
Reference to
*this
-
DiagonalReturnType diagonal() const#
-
Returns the diagonal of the tridiagonal matrix T in the decomposition.
See also
- Returns:
-
expression representing the diagonal of T
- Pre:
-
Either the constructor Tridiagonalization(const MatrixType&) or the member function compute(const MatrixType&) has been called before to compute the tridiagonal decomposition of a matrix.
-
inline CoeffVectorType householderCoefficients() const#
-
Returns the Householder coefficients.
The Householder coefficients allow the reconstruction of the matrix \( Q \) in the tridiagonal decomposition from the packed data.
- Returns:
-
a const reference to the vector of Householder coefficients
- Pre:
-
Either the constructor Tridiagonalization(const MatrixType&) or the member function compute(const MatrixType&) has been called before to compute the tridiagonal decomposition of a matrix.
-
inline MatrixType matrixQ()#
-
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. *
- Returns:
-
object representing the matrix Q
- Pre:
-
Either the constructor Tridiagonalization(const MatrixType&) or the member function compute(const MatrixType&) has been called before to compute the tridiagonal decomposition of a matrix.
-
inline const MatrixType &packedMatrix() const#
-
Returns the internal representation of the decomposition.
The returned matrix contains the following information:
the strict upper triangular part is equal to the input matrix A.
the diagonal and lower sub-diagonal represent the real tridiagonal symmetric matrix T.
the rest of the lower part contains the Householder vectors that, combined with Householder coefficients returned by householderCoefficients(), allows to reconstruct the matrix Q as \( Q = H_{N-1} \ldots H_1 H_0 \). Here, the matrices \( H_i \) are the Householder transformations \( H_i = (I - h_i v_i v_i^T) \) where \( h_i \) is the \( i \)th Householder coefficient and \( v_i \) is the Householder vector defined by \( v_i = [ 0, \ldots, 0, 1, M(i+2,i), \ldots, M(N-1,i) ]^T \) with M the matrix returned by this function.
See LAPACK for further details on this packed storage.
See also
- Returns:
-
a const reference to a matrix with the internal representation of the decomposition.
- Pre:
-
Either the constructor Tridiagonalization(const MatrixType&) or the member function compute(const MatrixType&) has been called before to compute the tridiagonal decomposition of a matrix.
-
SubDiagonalReturnType subDiagonal() const#
-
Returns the subdiagonal of the tridiagonal matrix T in the decomposition.
- Returns:
-
expression representing the subdiagonal of T
- Pre:
-
Either the constructor Tridiagonalization(const MatrixType&) or the member function compute(const MatrixType&) has been called before to compute the tridiagonal decomposition of a matrix.