Eigne Matrix Class Library

Dependents:   Eigen_test Odometry_test AttitudeEstimation_usingTicker MPU9250_Quaternion_Binary_Serial ... more

Eigen Matrix Class Library for mbed.

Finally, you can use Eigen on your mbed!!!

Committer:
ykuroda
Date:
Thu Oct 13 04:07:23 2016 +0000
Revision:
0:13a5d365ba16
First commint, Eigne Matrix Class Library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ykuroda 0:13a5d365ba16 1 // This file is part of Eigen, a lightweight C++ template library
ykuroda 0:13a5d365ba16 2 // for linear algebra.
ykuroda 0:13a5d365ba16 3 //
ykuroda 0:13a5d365ba16 4 // Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
ykuroda 0:13a5d365ba16 5 //
ykuroda 0:13a5d365ba16 6 // This Source Code Form is subject to the terms of the Mozilla
ykuroda 0:13a5d365ba16 7 // Public License v. 2.0. If a copy of the MPL was not distributed
ykuroda 0:13a5d365ba16 8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
ykuroda 0:13a5d365ba16 9
ykuroda 0:13a5d365ba16 10 #ifndef EIGEN_MISC_KERNEL_H
ykuroda 0:13a5d365ba16 11 #define EIGEN_MISC_KERNEL_H
ykuroda 0:13a5d365ba16 12
ykuroda 0:13a5d365ba16 13 namespace Eigen {
ykuroda 0:13a5d365ba16 14
ykuroda 0:13a5d365ba16 15 namespace internal {
ykuroda 0:13a5d365ba16 16
ykuroda 0:13a5d365ba16 17 /** \class kernel_retval_base
ykuroda 0:13a5d365ba16 18 *
ykuroda 0:13a5d365ba16 19 */
ykuroda 0:13a5d365ba16 20 template<typename DecompositionType>
ykuroda 0:13a5d365ba16 21 struct traits<kernel_retval_base<DecompositionType> >
ykuroda 0:13a5d365ba16 22 {
ykuroda 0:13a5d365ba16 23 typedef typename DecompositionType::MatrixType MatrixType;
ykuroda 0:13a5d365ba16 24 typedef Matrix<
ykuroda 0:13a5d365ba16 25 typename MatrixType::Scalar,
ykuroda 0:13a5d365ba16 26 MatrixType::ColsAtCompileTime, // the number of rows in the "kernel matrix"
ykuroda 0:13a5d365ba16 27 // is the number of cols of the original matrix
ykuroda 0:13a5d365ba16 28 // so that the product "matrix * kernel = zero" makes sense
ykuroda 0:13a5d365ba16 29 Dynamic, // we don't know at compile-time the dimension of the kernel
ykuroda 0:13a5d365ba16 30 MatrixType::Options,
ykuroda 0:13a5d365ba16 31 MatrixType::MaxColsAtCompileTime, // see explanation for 2nd template parameter
ykuroda 0:13a5d365ba16 32 MatrixType::MaxColsAtCompileTime // the kernel is a subspace of the domain space,
ykuroda 0:13a5d365ba16 33 // whose dimension is the number of columns of the original matrix
ykuroda 0:13a5d365ba16 34 > ReturnType;
ykuroda 0:13a5d365ba16 35 };
ykuroda 0:13a5d365ba16 36
ykuroda 0:13a5d365ba16 37 template<typename _DecompositionType> struct kernel_retval_base
ykuroda 0:13a5d365ba16 38 : public ReturnByValue<kernel_retval_base<_DecompositionType> >
ykuroda 0:13a5d365ba16 39 {
ykuroda 0:13a5d365ba16 40 typedef _DecompositionType DecompositionType;
ykuroda 0:13a5d365ba16 41 typedef ReturnByValue<kernel_retval_base> Base;
ykuroda 0:13a5d365ba16 42 typedef typename Base::Index Index;
ykuroda 0:13a5d365ba16 43
ykuroda 0:13a5d365ba16 44 kernel_retval_base(const DecompositionType& dec)
ykuroda 0:13a5d365ba16 45 : m_dec(dec),
ykuroda 0:13a5d365ba16 46 m_rank(dec.rank()),
ykuroda 0:13a5d365ba16 47 m_cols(m_rank==dec.cols() ? 1 : dec.cols() - m_rank)
ykuroda 0:13a5d365ba16 48 {}
ykuroda 0:13a5d365ba16 49
ykuroda 0:13a5d365ba16 50 inline Index rows() const { return m_dec.cols(); }
ykuroda 0:13a5d365ba16 51 inline Index cols() const { return m_cols; }
ykuroda 0:13a5d365ba16 52 inline Index rank() const { return m_rank; }
ykuroda 0:13a5d365ba16 53 inline const DecompositionType& dec() const { return m_dec; }
ykuroda 0:13a5d365ba16 54
ykuroda 0:13a5d365ba16 55 template<typename Dest> inline void evalTo(Dest& dst) const
ykuroda 0:13a5d365ba16 56 {
ykuroda 0:13a5d365ba16 57 static_cast<const kernel_retval<DecompositionType>*>(this)->evalTo(dst);
ykuroda 0:13a5d365ba16 58 }
ykuroda 0:13a5d365ba16 59
ykuroda 0:13a5d365ba16 60 protected:
ykuroda 0:13a5d365ba16 61 const DecompositionType& m_dec;
ykuroda 0:13a5d365ba16 62 Index m_rank, m_cols;
ykuroda 0:13a5d365ba16 63 };
ykuroda 0:13a5d365ba16 64
ykuroda 0:13a5d365ba16 65 } // end namespace internal
ykuroda 0:13a5d365ba16 66
ykuroda 0:13a5d365ba16 67 #define EIGEN_MAKE_KERNEL_HELPERS(DecompositionType) \
ykuroda 0:13a5d365ba16 68 typedef typename DecompositionType::MatrixType MatrixType; \
ykuroda 0:13a5d365ba16 69 typedef typename MatrixType::Scalar Scalar; \
ykuroda 0:13a5d365ba16 70 typedef typename MatrixType::RealScalar RealScalar; \
ykuroda 0:13a5d365ba16 71 typedef typename MatrixType::Index Index; \
ykuroda 0:13a5d365ba16 72 typedef Eigen::internal::kernel_retval_base<DecompositionType> Base; \
ykuroda 0:13a5d365ba16 73 using Base::dec; \
ykuroda 0:13a5d365ba16 74 using Base::rank; \
ykuroda 0:13a5d365ba16 75 using Base::rows; \
ykuroda 0:13a5d365ba16 76 using Base::cols; \
ykuroda 0:13a5d365ba16 77 kernel_retval(const DecompositionType& dec) : Base(dec) {}
ykuroda 0:13a5d365ba16 78
ykuroda 0:13a5d365ba16 79 } // end namespace Eigen
ykuroda 0:13a5d365ba16 80
ykuroda 0:13a5d365ba16 81 #endif // EIGEN_MISC_KERNEL_H