template<typename Derived>
SVDBase class
Base class of SVD algorithms.
Template parameters | |
---|---|
Derived | the type of the actual SVD decomposition |
Contents
SVD decomposition consists in decomposing any n-by-p matrix A as a product
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
template<typename Derived>
enum Eigen:: SVDBase<Derived>:: (anonymous)
Enumerators | |
---|---|
RowsAtCompileTime | |
ColsAtCompileTime | |
DiagSizeAtCompileTime | |
MaxRowsAtCompileTime | |
MaxColsAtCompileTime | |
MaxDiagSizeAtCompileTime | |
MatrixOptions |
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>
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>
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 .
If you want to come back to the default behavior, call setThreshold(Default_
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 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&).