Eigen::LeastSquareDiagonalPreconditioner< Scalar_ > Class Template Reference

Jacobi preconditioner for LeastSquaresConjugateGradient. More...

#include <BasicPreconditioners.h>

+ Inheritance diagram for Eigen::LeastSquareDiagonalPreconditioner< Scalar_ >:

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 ()
 
- Public Member Functions inherited from Eigen::DiagonalPreconditioner< Scalar_ >
 DiagonalPreconditioner ()
 
template<typename MatType >
 DiagonalPreconditioner (const MatType &mat)
 
EIGEN_CONSTEXPR Index rows () const EIGEN_NOEXCEPT
 
EIGEN_CONSTEXPR Index cols () const EIGEN_NOEXCEPT
 
template<typename MatType >
DiagonalPreconditioneranalyzePattern (const MatType &)
 
template<typename MatType >
DiagonalPreconditionerfactorize (const MatType &mat)
 
template<typename MatType >
DiagonalPreconditionercompute (const MatType &mat)
 
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
 
ComputationInfo info ()
 

Private Types

typedef Scalar_ Scalar
 
typedef NumTraits< Scalar >::Real RealScalar
 
typedef DiagonalPreconditioner< Scalar_ > Base
 

Private Attributes

Vector m_invdiag
 

Additional Inherited Members

- Public Types inherited from Eigen::DiagonalPreconditioner< Scalar_ >
enum  { ColsAtCompileTime = Dynamic , MaxColsAtCompileTime = Dynamic }
 
typedef Vector::StorageIndex StorageIndex
 
- Protected Attributes inherited from Eigen::DiagonalPreconditioner< Scalar_ >
Vector m_invdiag
 
bool m_isInitialized
 

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
Scalar * b
Definition: benchVecAdd.cpp:17
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
void diagonal(const MatrixType &m)
Definition: diagonal.cpp:13
list x
Definition: plotDoE.py:28
Template Parameters
Scalar_the 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

Constructor & Destructor Documentation

◆ LeastSquareDiagonalPreconditioner() [1/2]

template<typename Scalar_ >
Eigen::LeastSquareDiagonalPreconditioner< Scalar_ >::LeastSquareDiagonalPreconditioner ( )
inline
128 : Base() {}
DiagonalPreconditioner< Scalar_ > Base
Definition: BasicPreconditioners.h:124

◆ LeastSquareDiagonalPreconditioner() [2/2]

template<typename Scalar_ >
template<typename MatType >
Eigen::LeastSquareDiagonalPreconditioner< Scalar_ >::LeastSquareDiagonalPreconditioner ( const MatType &  mat)
inlineexplicit
131  : Base() {
132  compute(mat);
133  }
LeastSquareDiagonalPreconditioner & compute(const MatType &mat)
Definition: BasicPreconditioners.h:165

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

Member Function Documentation

◆ analyzePattern()

template<typename Scalar_ >
template<typename MatType >
LeastSquareDiagonalPreconditioner& Eigen::LeastSquareDiagonalPreconditioner< Scalar_ >::analyzePattern ( const MatType &  )
inline
136  {
137  return *this;
138  }

◆ compute()

template<typename Scalar_ >
template<typename MatType >
LeastSquareDiagonalPreconditioner& Eigen::LeastSquareDiagonalPreconditioner< Scalar_ >::compute ( const MatType &  mat)
inline
165  {
166  return factorize(mat);
167  }
LeastSquareDiagonalPreconditioner & factorize(const MatType &mat)
Definition: BasicPreconditioners.h:141

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

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

◆ factorize()

template<typename Scalar_ >
template<typename MatType >
LeastSquareDiagonalPreconditioner& Eigen::LeastSquareDiagonalPreconditioner< Scalar_ >::factorize ( const MatType &  mat)
inline
141  {
142  // Compute the inverse squared-norm of each column of mat
144  if (MatType::IsRowMajor) {
145  m_invdiag.setZero();
146  for (Index j = 0; j < mat.outerSize(); ++j) {
147  for (typename MatType::InnerIterator it(mat, j); it; ++it) m_invdiag(it.index()) += numext::abs2(it.value());
148  }
149  for (Index j = 0; j < mat.cols(); ++j)
151  } else {
152  for (Index j = 0; j < mat.outerSize(); ++j) {
153  RealScalar sum = mat.col(j).squaredNorm();
154  if (sum > RealScalar(0))
155  m_invdiag(j) = RealScalar(1) / sum;
156  else
157  m_invdiag(j) = RealScalar(1);
158  }
159  }
160  Base::m_isInitialized = true;
161  return *this;
162  }
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
bool m_isInitialized
Definition: BasicPreconditioners.h:100
Vector m_invdiag
Definition: BasicPreconditioners.h:99
NumTraits< Scalar >::Real RealScalar
Definition: BasicPreconditioners.h:123
EIGEN_DEVICE_FUNC Derived & setZero(Index size)
Definition: CwiseNullaryOp.h:569
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
Definition: PlainObjectBase.h:294
RealScalar squaredNorm() const
Definition: SparseDot.h:82
Index cols() const
Definition: SparseMatrix.h:161
Index outerSize() const
Definition: SparseMatrix.h:166
float real
Definition: datatypes.h:10
EIGEN_DEVICE_FUNC bool abs2(bool x)
Definition: MathFunctions.h:1102
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References Eigen::numext::abs2(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), j, Eigen::LeastSquareDiagonalPreconditioner< Scalar_ >::m_invdiag, Eigen::DiagonalPreconditioner< Scalar_ >::m_isInitialized, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::outerSize(), Eigen::PlainObjectBase< Derived >::resize(), Eigen::PlainObjectBase< Derived >::setZero(), and Eigen::SparseMatrixBase< Derived >::squaredNorm().

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

◆ info()

template<typename Scalar_ >
ComputationInfo Eigen::LeastSquareDiagonalPreconditioner< Scalar_ >::info ( )
inline
169 { return Success; }
@ Success
Definition: Constants.h:440

References Eigen::Success.

Member Data Documentation

◆ m_invdiag

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

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