diff options
Diffstat (limited to 'Eigen')
-rw-r--r-- | Eigen/src/Cholesky/Cholesky.h | 17 | ||||
-rw-r--r-- | Eigen/src/Cholesky/CholeskyWithoutSquareRoot.h | 13 | ||||
-rw-r--r-- | Eigen/src/Core/MatrixBase.h | 4 | ||||
-rw-r--r-- | Eigen/src/Core/util/ForwardDeclarations.h | 2 | ||||
-rw-r--r-- | Eigen/src/Geometry/AngleAxis.h | 11 |
5 files changed, 41 insertions, 6 deletions
diff --git a/Eigen/src/Cholesky/Cholesky.h b/Eigen/src/Cholesky/Cholesky.h index 8d9b6e8d8..c1f05d768 100644 --- a/Eigen/src/Cholesky/Cholesky.h +++ b/Eigen/src/Cholesky/Cholesky.h @@ -66,7 +66,7 @@ template<typename MatrixType> class Cholesky bool isPositiveDefinite(void) const { return m_isPositiveDefinite; } template<typename Derived> - typename Derived::Eval solve(MatrixBase<Derived> &b); + typename Derived::Eval solve(const MatrixBase<Derived> &b) const; void compute(const MatrixType& matrix); @@ -110,10 +110,14 @@ void Cholesky<MatrixType>::compute(const MatrixType& a) /** \returns the solution of A x = \a b using the current decomposition of A. * In other words, it returns \code A^-1 b \endcode computing * \code L^-* L^1 b \endcode from right to left. + * + * Example: \include Cholesky_solve.cpp + * Output: \verbinclude Cholesky_solve.out + * */ template<typename MatrixType> template<typename Derived> -typename Derived::Eval Cholesky<MatrixType>::solve(MatrixBase<Derived> &b) +typename Derived::Eval Cholesky<MatrixType>::solve(const MatrixBase<Derived> &b) const { const int size = m_matrix.rows(); ei_assert(size==b.size()); @@ -121,5 +125,14 @@ typename Derived::Eval Cholesky<MatrixType>::solve(MatrixBase<Derived> &b) return m_matrix.adjoint().template extract<Upper>().inverseProduct(matrixL().inverseProduct(b)); } +/** \cholesky_module + * \returns the Cholesky decomposition of \c *this + */ +template<typename Derived> +inline const Cholesky<typename ei_eval<Derived>::type> +MatrixBase<Derived>::cholesky() const +{ + return Cholesky<typename ei_eval<Derived>::type>(derived()); +} #endif // EIGEN_CHOLESKY_H diff --git a/Eigen/src/Cholesky/CholeskyWithoutSquareRoot.h b/Eigen/src/Cholesky/CholeskyWithoutSquareRoot.h index 8905385cc..2d85f78db 100644 --- a/Eigen/src/Cholesky/CholeskyWithoutSquareRoot.h +++ b/Eigen/src/Cholesky/CholeskyWithoutSquareRoot.h @@ -77,7 +77,7 @@ template<typename MatrixType> class CholeskyWithoutSquareRoot } template<typename Derived> - typename Derived::Eval solve(MatrixBase<Derived> &b); + typename Derived::Eval solve(const MatrixBase<Derived> &b) const; void compute(const MatrixType& matrix); @@ -127,7 +127,7 @@ void CholeskyWithoutSquareRoot<MatrixType>::compute(const MatrixType& a) */ template<typename MatrixType> template<typename Derived> -typename Derived::Eval CholeskyWithoutSquareRoot<MatrixType>::solve(MatrixBase<Derived> &vecB) +typename Derived::Eval CholeskyWithoutSquareRoot<MatrixType>::solve(const MatrixBase<Derived> &vecB) const { const int size = m_matrix.rows(); ei_assert(size==vecB.size()); @@ -140,5 +140,14 @@ typename Derived::Eval CholeskyWithoutSquareRoot<MatrixType>::solve(MatrixBase<D ); } +/** \cholesky_module + * \returns the Cholesky decomposition without square root of \c *this + */ +template<typename Derived> +inline const CholeskyWithoutSquareRoot<typename ei_eval<Derived>::type> +MatrixBase<Derived>::choleskyNoSqrt() const +{ + return derived(); +} #endif // EIGEN_CHOLESKY_WITHOUT_SQUARE_ROOT_H diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h index c6ea5f14f..bd4b64b05 100644 --- a/Eigen/src/Core/MatrixBase.h +++ b/Eigen/src/Core/MatrixBase.h @@ -532,6 +532,10 @@ template<typename Derived> class MatrixBase void computeInverse(typename ei_eval<Derived>::type *result) const; Scalar determinant() const; +/////////// Cholesky module /////////// + + const Cholesky<typename ei_eval<Derived>::type> cholesky() const; + const CholeskyWithoutSquareRoot<typename ei_eval<Derived>::type> choleskyNoSqrt() const; /////////// QR module /////////// diff --git a/Eigen/src/Core/util/ForwardDeclarations.h b/Eigen/src/Core/util/ForwardDeclarations.h index 0246b43cc..1fba262e2 100644 --- a/Eigen/src/Core/util/ForwardDeclarations.h +++ b/Eigen/src/Core/util/ForwardDeclarations.h @@ -96,6 +96,8 @@ void ei_cache_friendly_product( template<typename ExpressionType, bool CheckExistence = true> class Inverse; template<typename MatrixType> class QR; +template<typename MatrixType> class Cholesky; +template<typename MatrixType> class CholeskyWithoutSquareRoot; // Geometry module: template<typename Lhs, typename Rhs> class Cross; diff --git a/Eigen/src/Geometry/AngleAxis.h b/Eigen/src/Geometry/AngleAxis.h index abb9b50f6..647e07513 100644 --- a/Eigen/src/Geometry/AngleAxis.h +++ b/Eigen/src/Geometry/AngleAxis.h @@ -29,7 +29,7 @@ * * \class AngleAxis * - * \brief Represents a 3D rotation as a rotation angle around an arbitray 3D axis + * \brief Represents a 3D rotation as a rotation angle around an arbitrary 3D axis * * \param _Scalar the scalar type, i.e., the type of the coefficients. * @@ -37,7 +37,14 @@ * \li \c AngleAxisf for \c float * \li \c AngleAxisd for \c double * - * \sa class Quaternion, class Transform + * \addexample AngleAxisForEuler \label How to define a rotation from Euler-angles + * + * Combined with MatrixBase::Unit{X,Y,Z}, AngleAxis can be used to easily + * mimic Euler-angles. Here is an example: + * \include AngleAxis_mimic_euler.cpp + * Output: \verbinclude AngleAxis_mimic_euler.out + * + * \sa class Quaternion, class Transform, MatrixBase::UnitX() */ template<typename _Scalar> class AngleAxis |