Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Eigen::LeastSquareDiagonalPreconditioner< _Scalar > Class Template Reference

Jacobi preconditioner for LeastSquaresConjugateGradient. More...

#include <src/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h>

+ Inheritance diagram for Eigen::LeastSquareDiagonalPreconditioner< _Scalar >:
+ Collaboration diagram for Eigen::LeastSquareDiagonalPreconditioner< _Scalar >:

Public Types

enum  { ColsAtCompileTime = Dynamic , MaxColsAtCompileTime = Dynamic }
 
typedef Vector::StorageIndex StorageIndex
 

Public Member Functions

 LeastSquareDiagonalPreconditioner ()
 
template<typename MatType >
 LeastSquareDiagonalPreconditioner (const MatType &mat)
 
template<typename MatType >
LeastSquareDiagonalPreconditioneranalyzePattern (const MatType &)
 
template<typename MatType >
LeastSquareDiagonalPreconditionerfactorize (const MatType &mat)
 
template<typename MatType >
LeastSquareDiagonalPreconditionercompute (const MatType &mat)
 
ComputationInfo info ()
 
Index rows () const
 
Index cols () const
 
template<typename Rhs , typename Dest >
void _solve_impl (const Rhs &b, Dest &x) const
 
template<typename Rhs >
const Solve< DiagonalPreconditioner, Rhs > solve (const MatrixBase< Rhs > &b) const
 

Protected Attributes

bool m_isInitialized
 

Private Types

typedef _Scalar Scalar
 
typedef NumTraits< Scalar >::Real RealScalar
 
typedef DiagonalPreconditioner< _Scalar > Base
 
typedef Matrix< Scalar, Dynamic, 1 > Vector
 

Private Attributes

Vector m_invdiag
 

Detailed Description

template<typename _Scalar>
class Eigen::LeastSquareDiagonalPreconditioner< _Scalar >

Jacobi preconditioner for LeastSquaresConjugateGradient.

This class allows to approximately solve for A' A x = A' b problems assuming A' A is a diagonal matrix. In other words, this preconditioner neglects all off diagonal entries and, in Eigen's language, solves for:

(A.adjoint() * A).diagonal().asDiagonal() * x = b
Template Parameters
_Scalarthe type of the scalar.

\implsparsesolverconcept

The diagonal entries are pre-inverted and stored into a dense vector.

See also
class LeastSquaresConjugateGradient, class DiagonalPreconditioner

Member Typedef Documentation

◆ Base

template<typename _Scalar >
typedef DiagonalPreconditioner<_Scalar> Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::Base
private

◆ RealScalar

template<typename _Scalar >
typedef NumTraits<Scalar>::Real Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::RealScalar
private

◆ Scalar

template<typename _Scalar >
typedef _Scalar Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::Scalar
private

◆ StorageIndex

template<typename _Scalar >
typedef Vector::StorageIndex Eigen::DiagonalPreconditioner< _Scalar >::StorageIndex
inherited

◆ Vector

template<typename _Scalar >
typedef Matrix<Scalar,Dynamic,1> Eigen::DiagonalPreconditioner< _Scalar >::Vector
privateinherited

Member Enumeration Documentation

◆ anonymous enum

template<typename _Scalar >
anonymous enum
inherited
Enumerator
ColsAtCompileTime 
MaxColsAtCompileTime 
42 {
45 };
@ MaxColsAtCompileTime
Definition BasicPreconditioners.h:44
@ ColsAtCompileTime
Definition BasicPreconditioners.h:43
const int Dynamic
Definition Constants.h:21

Constructor & Destructor Documentation

◆ LeastSquareDiagonalPreconditioner() [1/2]

template<typename _Scalar >
Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::LeastSquareDiagonalPreconditioner ( )
inline
136: Base() {}
DiagonalPreconditioner< _Scalar > Base
Definition BasicPreconditioners.h:132

◆ LeastSquareDiagonalPreconditioner() [2/2]

template<typename _Scalar >
template<typename MatType >
Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::LeastSquareDiagonalPreconditioner ( const MatType &  mat)
inlineexplicit
139 : Base()
140 {
141 compute(mat);
142 }
LeastSquareDiagonalPreconditioner & compute(const MatType &mat)
Definition BasicPreconditioners.h:183

References Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::compute().

+ Here is the call graph for this function:

Member Function Documentation

◆ _solve_impl()

template<typename _Scalar >
template<typename Rhs , typename Dest >
void Eigen::DiagonalPreconditioner< _Scalar >::_solve_impl ( const Rhs &  b,
Dest &  x 
) const
inlineinherited
90 {
91 x = m_invdiag.array() * b.array() ;
92 }
Vector m_invdiag
Definition BasicPreconditioners.h:106
TCoord< P > x(const P &p)
Definition geometry_traits.hpp:297

References Eigen::DiagonalPreconditioner< _Scalar >::m_invdiag.

◆ analyzePattern()

template<typename _Scalar >
template<typename MatType >
LeastSquareDiagonalPreconditioner & Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::analyzePattern ( const MatType &  )
inline
146 {
147 return *this;
148 }

◆ cols()

template<typename _Scalar >
Index Eigen::DiagonalPreconditioner< _Scalar >::cols ( ) const
inlineinherited

◆ compute()

template<typename _Scalar >
template<typename MatType >
LeastSquareDiagonalPreconditioner & Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::compute ( const MatType &  mat)
inline
184 {
185 return factorize(mat);
186 }
LeastSquareDiagonalPreconditioner & factorize(const MatType &mat)
Definition BasicPreconditioners.h:151

References Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::factorize().

Referenced by Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::LeastSquareDiagonalPreconditioner().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ factorize()

template<typename _Scalar >
template<typename MatType >
LeastSquareDiagonalPreconditioner & Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::factorize ( const MatType &  mat)
inline
152 {
153 // Compute the inverse squared-norm of each column of mat
154 m_invdiag.resize(mat.cols());
155 if(MatType::IsRowMajor)
156 {
158 for(Index j=0; j<mat.outerSize(); ++j)
159 {
160 for(typename MatType::InnerIterator it(mat,j); it; ++it)
161 m_invdiag(it.index()) += numext::abs2(it.value());
162 }
163 for(Index j=0; j<mat.cols(); ++j)
164 if(numext::real(m_invdiag(j))>RealScalar(0))
165 m_invdiag(j) = RealScalar(1)/numext::real(m_invdiag(j));
166 }
167 else
168 {
169 for(Index j=0; j<mat.outerSize(); ++j)
170 {
171 RealScalar sum = mat.col(j).squaredNorm();
172 if(sum>RealScalar(0))
173 m_invdiag(j) = RealScalar(1)/sum;
174 else
175 m_invdiag(j) = RealScalar(1);
176 }
177 }
179 return *this;
180 }
bool m_isInitialized
Definition BasicPreconditioners.h:107
Vector m_invdiag
Definition BasicPreconditioners.h:106
NumTraits< Scalar >::Real RealScalar
Definition BasicPreconditioners.h:131
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
Definition PlainObjectBase.h:279
EIGEN_DEVICE_FUNC Derived & setZero(Index size)
Definition CwiseNullaryOp.h:515
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:33
IGL_INLINE void sum(const Eigen::SparseMatrix< T > &X, const int dim, Eigen::SparseVector< T > &S)
Definition sum.cpp:12

References Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::m_invdiag, Eigen::DiagonalPreconditioner< _Scalar >::m_isInitialized, Eigen::PlainObjectBase< Derived >::resize(), and Eigen::PlainObjectBase< Derived >::setZero().

Referenced by Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::compute().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ info()

template<typename _Scalar >
ComputationInfo Eigen::LeastSquareDiagonalPreconditioner< _Scalar >::info ( )
inline
188{ return Success; }
@ Success
Definition Constants.h:432

References Eigen::Success.

◆ rows()

template<typename _Scalar >
Index Eigen::DiagonalPreconditioner< _Scalar >::rows ( ) const
inlineinherited

◆ solve()

template<typename _Scalar >
template<typename Rhs >
const Solve< DiagonalPreconditioner, Rhs > Eigen::DiagonalPreconditioner< _Scalar >::solve ( const MatrixBase< Rhs > &  b) const
inlineinherited
96 {
97 eigen_assert(m_isInitialized && "DiagonalPreconditioner is not initialized.");
98 eigen_assert(m_invdiag.size()==b.rows()
99 && "DiagonalPreconditioner::solve(): invalid number of rows of the right hand side matrix b");
100 return Solve<DiagonalPreconditioner, Rhs>(*this, b.derived());
101 }
#define eigen_assert(x)
Definition Macros.h:579

References eigen_assert, Eigen::DiagonalPreconditioner< _Scalar >::m_invdiag, and Eigen::DiagonalPreconditioner< _Scalar >::m_isInitialized.

Member Data Documentation

◆ m_invdiag

template<typename _Scalar >
Vector Eigen::DiagonalPreconditioner< _Scalar >::m_invdiag
private

◆ m_isInitialized


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