template<typename Derived>
Eigen::SVDBase class

Base class of SVD algorithms.

Template parameters
Derived the type of the actual SVD decomposition

SVD decomposition consists in decomposing any n-by-p matrix A as a product

\[ A = U S V^* \]

where U is a n-by-n unitary, V is a p-by-p unitary, and S is a n-by-p real positive matrix which is zero outside of its main diagonal; the diagonal entries of S are known as the singular values of A and the columns of U and V are known as the left and right singular vectors of A respectively.

Singular values are always sorted in decreasing order.

You can ask for only thin U or V to be computed, meaning the following. In case of a rectangular n-by-p matrix, letting m be the smaller value among n and p, there are only m singular vectors; the remaining columns of U and V do not correspond to actual singular vectors. Asking for thin U or V means asking for only their m first columns to be formed. So U is then a n-by-m matrix, and V is then a p-by-m matrix. Notice that thin U and V are all you need for (least squares) solving.

If the input matrix has inf or nan coefficients, the result of the computation is undefined, but the computation is guaranteed to terminate in finite (and reasonable) time.

Base classes

template<typename Derived>
class SolverBase
A base class for matrix decomposition and solvers.

Public types

enum (anonymous) { RowsAtCompileTime = MatrixType::RowsAtCompileTime, ColsAtCompileTime = MatrixType::ColsAtCompileTime, DiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_DYNAMIC(RowsAtCompileTime,ColsAtCompileTime), MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime, MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime, MaxDiagSizeAtCompileTime = EIGEN_SIZE_MIN_PREFER_FIXED(MaxRowsAtCompileTime,MaxColsAtCompileTime), MatrixOptions = MatrixType::Options }
using Index = Eigen::Index deprecated
using MatrixType = internal::traits<Derived>::MatrixType
using MatrixUType = Matrix<Scalar, RowsAtCompileTime, RowsAtCompileTime, MatrixOptions, MaxRowsAtCompileTime, MaxRowsAtCompileTime>
using MatrixVType = Matrix<Scalar, ColsAtCompileTime, ColsAtCompileTime, MatrixOptions, MaxColsAtCompileTime, MaxColsAtCompileTime>
using RealScalar = NumTraits<typename MatrixType::Scalar>::Real
using Scalar = MatrixType::Scalar
using SingularValuesType = internal::plain_diag_type<MatrixType, RealScalar>::type
using StorageIndex = Eigen::internal::traits<SVDBase>::StorageIndex

Constructors, destructors, conversion operators

SVDBase() protected
Default Constructor.

Public functions

auto cols() const -> Index
auto computeU() const -> bool
auto computeV() const -> bool
auto derived() -> Derived&
auto derived() const -> const Derived&
auto matrixU() const -> const MatrixUType&
auto matrixV() const -> const MatrixVType&
auto nonzeroSingularValues() const -> Index
auto rank() const -> Index
auto rows() const -> Index
auto setThreshold(const RealScalar& threshold) -> Derived&
auto setThreshold(Default_t) -> Derived&
auto singularValues() const -> const SingularValuesType&
template<typename Rhs>
auto solve(const MatrixBase<Rhs>& b) const -> const Solve<Derived, Rhs>
auto threshold() const -> RealScalar

Protected static functions

static void check_template_parameters()

Protected functions

template<bool Transpose_, typename Rhs>
void _check_solve_assertion(const Rhs& b) const
auto allocate(Index rows, Index cols, unsigned int computationOptions) -> bool

Protected variables

Index m_cols
unsigned int m_computationOptions
bool m_computeFullU
bool m_computeFullV
bool m_computeThinU
bool m_computeThinV
Index m_diagSize
bool m_isAllocated
bool m_isInitialized
MatrixUType m_matrixU
MatrixVType m_matrixV
Index m_nonzeroSingularValues
RealScalar m_prescribedThreshold
Index m_rows
SingularValuesType m_singularValues
bool m_usePrescribedThreshold

Enum documentation

Typedef documentation

template<typename Derived>
typedef Eigen::Index Eigen::SVDBase<Derived>::Index

template<typename Derived>
typedef internal::traits<Derived>::MatrixType Eigen::SVDBase<Derived>::MatrixType

template<typename Derived>
typedef Matrix<Scalar, RowsAtCompileTime, RowsAtCompileTime, MatrixOptions, MaxRowsAtCompileTime, MaxRowsAtCompileTime> Eigen::SVDBase<Derived>::MatrixUType

template<typename Derived>
typedef Matrix<Scalar, ColsAtCompileTime, ColsAtCompileTime, MatrixOptions, MaxColsAtCompileTime, MaxColsAtCompileTime> Eigen::SVDBase<Derived>::MatrixVType

template<typename Derived>
typedef NumTraits<typename MatrixType::Scalar>::Real Eigen::SVDBase<Derived>::RealScalar

template<typename Derived>
typedef MatrixType::Scalar Eigen::SVDBase<Derived>::Scalar

template<typename Derived>
typedef internal::plain_diag_type<MatrixType, RealScalar>::type Eigen::SVDBase<Derived>::SingularValuesType

template<typename Derived>
typedef Eigen::internal::traits<SVDBase>::StorageIndex Eigen::SVDBase<Derived>::StorageIndex

Function documentation

template<typename Derived>
Eigen::SVDBase<Derived>::SVDBase() protected

Default Constructor.

Default constructor of SVDBase

template<typename Derived>
Index Eigen::SVDBase<Derived>::cols() const

template<typename Derived>
bool Eigen::SVDBase<Derived>::computeU() const

Returns true if U (full or thin) is asked for in this SVD decomposition

template<typename Derived>
bool Eigen::SVDBase<Derived>::computeV() const

Returns true if V (full or thin) is asked for in this SVD decomposition

template<typename Derived>
Derived& Eigen::SVDBase<Derived>::derived()

template<typename Derived>
const Derived& Eigen::SVDBase<Derived>::derived() const

template<typename Derived>
const MatrixUType& Eigen::SVDBase<Derived>::matrixU() const

Returns the U matrix.

For the SVD decomposition of a n-by-p matrix, letting m be the minimum of n and p, the U matrix is n-by-n if you asked for ComputeFullU, and is n-by-m if you asked for ComputeThinU.

The m first columns of U are the left singular vectors of the matrix being decomposed.

This method asserts that you asked for U to be computed.

template<typename Derived>
const MatrixVType& Eigen::SVDBase<Derived>::matrixV() const

Returns the V matrix.

For the SVD decomposition of a n-by-p matrix, letting m be the minimum of n and p, the V matrix is p-by-p if you asked for ComputeFullV, and is p-by-m if you asked for ComputeThinV.

The m first columns of V are the right singular vectors of the matrix being decomposed.

This method asserts that you asked for V to be computed.

template<typename Derived>
Index Eigen::SVDBase<Derived>::nonzeroSingularValues() const

Returns the number of singular values that are not exactly 0

template<typename Derived>
Index Eigen::SVDBase<Derived>::rank() const

Returns the rank of the matrix of which *this is the SVD.

template<typename Derived>
Index Eigen::SVDBase<Derived>::rows() const

template<typename Derived>
Derived& Eigen::SVDBase<Derived>::setThreshold(const RealScalar& threshold)

Parameters
threshold The new value to use as the threshold.

Allows to prescribe a threshold to be used by certain methods, such as rank() and solve(), which need to determine when singular values are to be considered nonzero. This is not used for the SVD decomposition itself.

When it needs to get the threshold value, Eigen calls threshold(). The default is NumTraits<Scalar>::epsilon()

A singular value will be considered nonzero if its value is strictly greater than $ \vert singular value \vert \leqslant threshold \times \vert max singular value \vert $ .

If you want to come back to the default behavior, call setThreshold(Default_t)

template<typename Derived>
Derived& Eigen::SVDBase<Derived>::setThreshold(Default_t)

Allows to come back to the default behavior, letting Eigen use its default formula for determining the threshold.

You should pass the special object Eigen::Default as parameter here. svd.setThreshold(Eigen::Default);

See the documentation of setThreshold(const RealScalar&).

template<typename Derived>
const SingularValuesType& Eigen::SVDBase<Derived>::singularValues() const

Returns the vector of singular values.

For the SVD decomposition of a n-by-p matrix, letting m be the minimum of n and p, the returned vector has size m. Singular values are always sorted in decreasing order.

template<typename Derived> template<typename Rhs>
const Solve<Derived, Rhs> Eigen::SVDBase<Derived>::solve(const MatrixBase<Rhs>& b) const

Parameters
b the right-hand-side of the equation to solve.
Returns a (least squares) solution of $ A x = b $ using the current SVD decomposition of A.

template<typename Derived>
RealScalar Eigen::SVDBase<Derived>::threshold() const

Returns the threshold that will be used by certain methods such as rank().

See the documentation of setThreshold(const RealScalar&).

template<typename Derived>
static void Eigen::SVDBase<Derived>::check_template_parameters() protected

template<typename Derived> template<bool Transpose_, typename Rhs>
void Eigen::SVDBase<Derived>::_check_solve_assertion(const Rhs& b) const protected

template<typename Derived>
bool Eigen::SVDBase<Derived>::allocate(Index rows, Index cols, unsigned int computationOptions) protected

Variable documentation

template<typename Derived>
Index Eigen::SVDBase<Derived>::m_cols protected

template<typename Derived>
unsigned int Eigen::SVDBase<Derived>::m_computationOptions protected

template<typename Derived>
bool Eigen::SVDBase<Derived>::m_computeFullU protected

template<typename Derived>
bool Eigen::SVDBase<Derived>::m_computeFullV protected

template<typename Derived>
bool Eigen::SVDBase<Derived>::m_computeThinU protected

template<typename Derived>
bool Eigen::SVDBase<Derived>::m_computeThinV protected

template<typename Derived>
Index Eigen::SVDBase<Derived>::m_diagSize protected

template<typename Derived>
bool Eigen::SVDBase<Derived>::m_isAllocated protected

template<typename Derived>
bool Eigen::SVDBase<Derived>::m_isInitialized protected

template<typename Derived>
MatrixUType Eigen::SVDBase<Derived>::m_matrixU protected

template<typename Derived>
MatrixVType Eigen::SVDBase<Derived>::m_matrixV protected

template<typename Derived>
Index Eigen::SVDBase<Derived>::m_nonzeroSingularValues protected

template<typename Derived>
RealScalar Eigen::SVDBase<Derived>::m_prescribedThreshold protected

template<typename Derived>
Index Eigen::SVDBase<Derived>::m_rows protected

template<typename Derived>
SingularValuesType Eigen::SVDBase<Derived>::m_singularValues protected

template<typename Derived>
bool Eigen::SVDBase<Derived>::m_usePrescribedThreshold protected