Path Tracer
Public Types | Public Member Functions | Static Protected Member Functions | Protected Attributes | Friends | List of all members
Eigen::LDLT< _MatrixType, _UpLo > Class Template Reference

Robust Cholesky decomposition of a matrix with pivoting. More...

#include <LDLT.h>

Inheritance diagram for Eigen::LDLT< _MatrixType, _UpLo >:
Eigen::SolverBase< LDLT< _MatrixType, _UpLo > > Eigen::EigenBase< LDLT< _MatrixType, _UpLo > >

Public Types

enum  { MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime, MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime, UpLo = _UpLo }
 
typedef _MatrixType MatrixType
 
typedef SolverBase< LDLTBase
 
typedef Matrix< Scalar, RowsAtCompileTime, 1, 0, MaxRowsAtCompileTime, 1 > TmpMatrixType
 
typedef Transpositions< RowsAtCompileTime, MaxRowsAtCompileTime > TranspositionType
 
typedef PermutationMatrix< RowsAtCompileTime, MaxRowsAtCompileTime > PermutationType
 
typedef internal::LDLT_Traits< MatrixType, UpLo > Traits
 
- Public Types inherited from Eigen::SolverBase< LDLT< _MatrixType, _UpLo > >
enum  
 
typedef EigenBase< LDLT< _MatrixType, _UpLo > > Base
 
typedef internal::traits< LDLT< _MatrixType, _UpLo > >::Scalar Scalar
 
typedef Scalar CoeffReturnType
 
typedef internal::add_const< Transpose< const LDLT< _MatrixType, _UpLo > > >::type ConstTransposeReturnType
 
typedef internal::conditional< NumTraits< Scalar >::IsComplex, CwiseUnaryOp< internal::scalar_conjugate_op< Scalar >, ConstTransposeReturnType >, ConstTransposeReturnType >::type AdjointReturnType
 
- Public Types inherited from Eigen::EigenBase< LDLT< _MatrixType, _UpLo > >
typedef Eigen::Index Index
 The interface type of indices. More...
 
typedef internal::traits< LDLT< _MatrixType, _UpLo > >::StorageKind StorageKind
 

Public Member Functions

 LDLT ()
 Default Constructor. More...
 
 LDLT (Index size)
 Default Constructor with memory preallocation. More...
 
template<typename InputType >
 LDLT (const EigenBase< InputType > &matrix)
 Constructor with decomposition. More...
 
template<typename InputType >
 LDLT (EigenBase< InputType > &matrix)
 Constructs a LDLT factorization from a given matrix. More...
 
void setZero ()
 
Traits::MatrixU matrixU () const
 
Traits::MatrixL matrixL () const
 
const TranspositionTypetranspositionsP () const
 
Diagonal< const MatrixType > vectorD () const
 
bool isPositive () const
 
bool isNegative (void) const
 
template<typename Derived >
bool solveInPlace (MatrixBase< Derived > &bAndX) const
 
template<typename InputType >
LDLTcompute (const EigenBase< InputType > &matrix)
 
RealScalar rcond () const
 
template<typename Derived >
LDLTrankUpdate (const MatrixBase< Derived > &w, const RealScalar &alpha=1)
 
const MatrixType & matrixLDLT () const
 
MatrixType reconstructedMatrix () const
 
const LDLTadjoint () const
 
EIGEN_DEVICE_FUNC Index rows () const
 
EIGEN_DEVICE_FUNC Index cols () const
 
ComputationInfo info () const
 Reports whether previous computation was successful. More...
 
template<typename RhsType , typename DstType >
void _solve_impl (const RhsType &rhs, DstType &dst) const
 
template<bool Conjugate, typename RhsType , typename DstType >
void _solve_impl_transposed (const RhsType &rhs, DstType &dst) const
 
template<typename InputType >
LDLT< MatrixType, _UpLo > & compute (const EigenBase< InputType > &a)
 
template<typename Derived >
LDLT< MatrixType, _UpLo > & rankUpdate (const MatrixBase< Derived > &w, const typename LDLT< MatrixType, _UpLo >::RealScalar &sigma)
 
- Public Member Functions inherited from Eigen::SolverBase< LDLT< _MatrixType, _UpLo > >
 SolverBase ()
 
const Solve< LDLT< _MatrixType, _UpLo >, Rhs > solve (const MatrixBase< Rhs > &b) const
 
ConstTransposeReturnType transpose () const
 
AdjointReturnType adjoint () const
 
EIGEN_DEVICE_FUNC LDLT< _MatrixType, _UpLo > & derived ()
 
EIGEN_DEVICE_FUNC const LDLT< _MatrixType, _UpLo > & derived () const
 
- Public Member Functions inherited from Eigen::EigenBase< LDLT< _MatrixType, _UpLo > >
EIGEN_DEVICE_FUNC LDLT< _MatrixType, _UpLo > & derived ()
 
EIGEN_DEVICE_FUNC const LDLT< _MatrixType, _UpLo > & derived () const
 
EIGEN_DEVICE_FUNC LDLT< _MatrixType, _UpLo > & const_cast_derived () const
 
EIGEN_DEVICE_FUNC const LDLT< _MatrixType, _UpLo > & const_derived () const
 
EIGEN_DEVICE_FUNC Index rows () const
 
EIGEN_DEVICE_FUNC Index cols () const
 
EIGEN_DEVICE_FUNC Index size () const
 
EIGEN_DEVICE_FUNC void evalTo (Dest &dst) const
 
EIGEN_DEVICE_FUNC void addTo (Dest &dst) const
 
EIGEN_DEVICE_FUNC void subTo (Dest &dst) const
 
EIGEN_DEVICE_FUNC void applyThisOnTheRight (Dest &dst) const
 
EIGEN_DEVICE_FUNC void applyThisOnTheLeft (Dest &dst) const
 

Static Protected Member Functions

static void check_template_parameters ()
 

Protected Attributes

MatrixType m_matrix
 
RealScalar m_l1_norm
 
TranspositionType m_transpositions
 
TmpMatrixType m_temporary
 
internal::SignMatrix m_sign
 
bool m_isInitialized
 
ComputationInfo m_info
 

Friends

class SolverBase< LDLT >
 

Additional Inherited Members

- Protected Member Functions inherited from Eigen::SolverBase< LDLT< _MatrixType, _UpLo > >
void _check_solve_assertion (const Rhs &b) const
 

Detailed Description

template<typename _MatrixType, int _UpLo>
class Eigen::LDLT< _MatrixType, _UpLo >

Robust Cholesky decomposition of a matrix with pivoting.

Template Parameters
_MatrixTypethe type of the matrix of which to compute the LDL^T Cholesky decomposition
_UpLothe triangular part that will be used for the decompositon: Lower (default) or Upper. The other triangular part won't be read.

Perform a robust Cholesky decomposition of a positive semidefinite or negative semidefinite matrix $ A $ such that $ A = P^TLDL^*P $, where P is a permutation matrix, L is lower triangular with a unit diagonal and D is a diagonal matrix.

The decomposition uses pivoting to ensure stability, so that L will have zeros in the bottom right rank(A) - n submatrix. Avoiding the square root on D also stabilizes the computation.

Remember that Cholesky decompositions are not rank-revealing. Also, do not use a Cholesky decomposition to determine whether a system of equations has a solution.

This class supports the inplace decomposition mechanism.

See also
MatrixBase::ldlt(), SelfAdjointView::ldlt(), class LLT

Constructor & Destructor Documentation

◆ LDLT() [1/4]

template<typename _MatrixType , int _UpLo>
Eigen::LDLT< _MatrixType, _UpLo >::LDLT ( )
inline

Default Constructor.

The default constructor is useful in cases in which the user intends to perform decompositions via LDLT::compute(const MatrixType&).

◆ LDLT() [2/4]

template<typename _MatrixType , int _UpLo>
Eigen::LDLT< _MatrixType, _UpLo >::LDLT ( Index  size)
inlineexplicit

Default Constructor with memory preallocation.

Like the default constructor but with preallocation of the internal data according to the specified problem size.

See also
LDLT()

◆ LDLT() [3/4]

template<typename _MatrixType , int _UpLo>
template<typename InputType >
Eigen::LDLT< _MatrixType, _UpLo >::LDLT ( const EigenBase< InputType > &  matrix)
inlineexplicit

Constructor with decomposition.

This calculates the decomposition for the input matrix.

See also
LDLT(Index size)

◆ LDLT() [4/4]

template<typename _MatrixType , int _UpLo>
template<typename InputType >
Eigen::LDLT< _MatrixType, _UpLo >::LDLT ( EigenBase< InputType > &  matrix)
inlineexplicit

Constructs a LDLT factorization from a given matrix.

This overloaded constructor is provided for inplace decomposition when MatrixType is a Eigen::Ref.

See also
LDLT(const EigenBase&)

Member Function Documentation

◆ adjoint()

template<typename _MatrixType , int _UpLo>
const LDLT& Eigen::LDLT< _MatrixType, _UpLo >::adjoint ( ) const
inline
Returns
the adjoint of *this, that is, a const reference to the decomposition itself as the underlying matrix is self-adjoint.

This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:

x = decomposition.adjoint().solve(b)

◆ compute()

template<typename _MatrixType , int _UpLo>
template<typename InputType >
LDLT<MatrixType,_UpLo>& Eigen::LDLT< _MatrixType, _UpLo >::compute ( const EigenBase< InputType > &  a)

Compute / recompute the LDLT decomposition A = L D L^* = U^* D U of matrix

◆ info()

template<typename _MatrixType , int _UpLo>
ComputationInfo Eigen::LDLT< _MatrixType, _UpLo >::info ( ) const
inline

Reports whether previous computation was successful.

Returns
Success if computation was successful, NumericalIssue if the factorization failed because of a zero pivot.

◆ isNegative()

template<typename _MatrixType , int _UpLo>
bool Eigen::LDLT< _MatrixType, _UpLo >::isNegative ( void  ) const
inline
Returns
true if the matrix is negative (semidefinite)

◆ isPositive()

template<typename _MatrixType , int _UpLo>
bool Eigen::LDLT< _MatrixType, _UpLo >::isPositive ( ) const
inline
Returns
true if the matrix is positive (semidefinite)

◆ matrixL()

template<typename _MatrixType , int _UpLo>
Traits::MatrixL Eigen::LDLT< _MatrixType, _UpLo >::matrixL ( ) const
inline
Returns
a view of the lower triangular matrix L

◆ matrixLDLT()

template<typename _MatrixType , int _UpLo>
const MatrixType& Eigen::LDLT< _MatrixType, _UpLo >::matrixLDLT ( ) const
inline
Returns
the internal LDLT decomposition matrix

TODO: document the storage layout

◆ matrixU()

template<typename _MatrixType , int _UpLo>
Traits::MatrixU Eigen::LDLT< _MatrixType, _UpLo >::matrixU ( ) const
inline
Returns
a view of the upper triangular matrix U

◆ rankUpdate()

template<typename _MatrixType , int _UpLo>
template<typename Derived >
LDLT<MatrixType,_UpLo>& Eigen::LDLT< _MatrixType, _UpLo >::rankUpdate ( const MatrixBase< Derived > &  w,
const typename LDLT< MatrixType, _UpLo >::RealScalar &  sigma 
)

Update the LDLT decomposition: given A = L D L^T, efficiently compute the decomposition of A + sigma w w^T.

Parameters
wa vector to be incorporated into the decomposition.
sigmaa scalar, +1 for updates and -1 for "downdates," which correspond to removing previously-added column vectors. Optional; default value is +1.
See also
setZero()

◆ rcond()

template<typename _MatrixType , int _UpLo>
RealScalar Eigen::LDLT< _MatrixType, _UpLo >::rcond ( ) const
inline
Returns
an estimate of the reciprocal condition number of the matrix of which *this is the LDLT decomposition.

◆ reconstructedMatrix()

template<typename MatrixType , int _UpLo>
MatrixType Eigen::LDLT< MatrixType, _UpLo >::reconstructedMatrix
Returns
the matrix represented by the decomposition, i.e., it returns the product: P^T L D L^* P. This function is provided for debug purpose.

◆ setZero()

template<typename _MatrixType , int _UpLo>
void Eigen::LDLT< _MatrixType, _UpLo >::setZero ( )
inline

Clear any existing decomposition

See also
rankUpdate(w,sigma)

◆ transpositionsP()

template<typename _MatrixType , int _UpLo>
const TranspositionType& Eigen::LDLT< _MatrixType, _UpLo >::transpositionsP ( ) const
inline
Returns
the permutation matrix P as a transposition sequence.

◆ vectorD()

template<typename _MatrixType , int _UpLo>
Diagonal<const MatrixType> Eigen::LDLT< _MatrixType, _UpLo >::vectorD ( ) const
inline
Returns
the coefficients of the diagonal matrix D

The documentation for this class was generated from the following file: