1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_CWISE_NULLARY_OP_H 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_CWISE_NULLARY_OP_H 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace Eigen { 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \class CwiseNullaryOp 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \ingroup Core_Module 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \brief Generic expression of a matrix where all coefficients are defined by a functor 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \param NullaryOp template functor implementing the operator 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \param PlainObjectType the underlying plain matrix/array type 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This class represents an expression of a generic nullary operator. 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * It is the return type of the Ones(), Zero(), Constant(), Identity() and Random() methods, 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * and most of the time this is the only way it is used. 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * However, if you want to write a function returning such an expression, you 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * will need to use this class. 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseUnaryOp, class CwiseBinaryOp, DenseBase::NullaryExpr() 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename NullaryOp, typename PlainObjectType> 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct traits<CwiseNullaryOp<NullaryOp, PlainObjectType> > : traits<PlainObjectType> 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath enum { 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Flags = (traits<PlainObjectType>::Flags 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath & ( HereditaryBits 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath | (functor_has_linear_access<NullaryOp>::ret ? LinearAccessBit : 0) 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath | (functor_traits<NullaryOp>::PacketAccess ? PacketAccessBit : 0))) 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath | (functor_traits<NullaryOp>::IsRepeatable ? 0 : EvalBeforeNestingBit), 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath CoeffReadCost = functor_traits<NullaryOp>::Cost 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath }; 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename NullaryOp, typename PlainObjectType> 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass CwiseNullaryOp : internal::no_assignment_operator, 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public internal::dense_xpr_base< CwiseNullaryOp<NullaryOp, PlainObjectType> >::type 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public: 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename internal::dense_xpr_base<CwiseNullaryOp>::type Base; 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_DENSE_PUBLIC_INTERFACE(CwiseNullaryOp) 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 577faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez CwiseNullaryOp(Index nbRows, Index nbCols, const NullaryOp& func = NullaryOp()) 587faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez : m_rows(nbRows), m_cols(nbCols), m_functor(func) 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 607faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez eigen_assert(nbRows >= 0 617faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == nbRows) 627faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez && nbCols >= 0 637faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == nbCols)); 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STRONG_INLINE Index rows() const { return m_rows.value(); } 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STRONG_INLINE Index cols() const { return m_cols.value(); } 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 697faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez EIGEN_STRONG_INLINE const Scalar coeff(Index rowId, Index colId) const 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 717faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_functor(rowId, colId); 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 757faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez EIGEN_STRONG_INLINE PacketScalar packet(Index rowId, Index colId) const 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 777faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_functor.packetOp(rowId, colId); 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STRONG_INLINE const Scalar coeff(Index index) const 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_functor(index); 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STRONG_INLINE PacketScalar packet(Index index) const 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_functor.packetOp(index); 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath /** \returns the functor representing the nullary operation */ 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const NullaryOp& functor() const { return m_functor; } 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath protected: 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const internal::variable_if_dynamic<Index, RowsAtCompileTime> m_rows; 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const internal::variable_if_dynamic<Index, ColsAtCompileTime> m_cols; 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const NullaryOp m_functor; 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a matrix defined by a custom functor \a func 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The parameters \a rows and \a cols are the number of rows and of columns of 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * the returned matrix. Must be compatible with this MatrixBase type. 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * instead. 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The template parameter \a CustomNullaryOp is the type of the functor. 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename CustomNullaryOp> 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const CwiseNullaryOp<CustomNullaryOp, Derived> 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::NullaryExpr(Index rows, Index cols, const CustomNullaryOp& func) 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return CwiseNullaryOp<CustomNullaryOp, Derived>(rows, cols, func); 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a matrix defined by a custom functor \a func 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The parameter \a size is the size of the returned vector. 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Must be compatible with this MatrixBase type. 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is meant to be used for dynamic-size vector types. For fixed-size types, 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * it is redundant to pass \a size as argument, so Zero() should be used 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * instead. 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The template parameter \a CustomNullaryOp is the type of the functor. 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename CustomNullaryOp> 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const CwiseNullaryOp<CustomNullaryOp, Derived> 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::NullaryExpr(Index size, const CustomNullaryOp& func) 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(RowsAtCompileTime == 1) return CwiseNullaryOp<CustomNullaryOp, Derived>(1, size, func); 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else return CwiseNullaryOp<CustomNullaryOp, Derived>(size, 1, func); 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a matrix defined by a custom functor \a func 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is only for fixed-size DenseBase types. For dynamic-size types, you 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * need to use the variants taking size arguments. 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The template parameter \a CustomNullaryOp is the type of the functor. 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename CustomNullaryOp> 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const CwiseNullaryOp<CustomNullaryOp, Derived> 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::NullaryExpr(const CustomNullaryOp& func) 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return CwiseNullaryOp<CustomNullaryOp, Derived>(RowsAtCompileTime, ColsAtCompileTime, func); 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a constant matrix of value \a value 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 1667faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * The parameters \a nbRows and \a nbCols are the number of rows and of columns of 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * the returned matrix. Must be compatible with this DenseBase type. 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, 1707faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * it is redundant to pass \a nbRows and \a nbCols as arguments, so Zero() should be used 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * instead. 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The template parameter \a CustomNullaryOp is the type of the functor. 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType 1797faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezDenseBase<Derived>::Constant(Index nbRows, Index nbCols, const Scalar& value) 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 1817faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return DenseBase<Derived>::NullaryExpr(nbRows, nbCols, internal::scalar_constant_op<Scalar>(value)); 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a constant matrix of value \a value 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The parameter \a size is the size of the returned vector. 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Must be compatible with this DenseBase type. 188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is meant to be used for dynamic-size vector types. For fixed-size types, 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * it is redundant to pass \a size as argument, so Zero() should be used 193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * instead. 194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The template parameter \a CustomNullaryOp is the type of the functor. 196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp 198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType 201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::Constant(Index size, const Scalar& value) 202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return DenseBase<Derived>::NullaryExpr(size, internal::scalar_constant_op<Scalar>(value)); 204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a constant matrix of value \a value 207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is only for fixed-size DenseBase types. For dynamic-size types, you 209c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * need to use the variants taking size arguments. 210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 211c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The template parameter \a CustomNullaryOp is the type of the functor. 212c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp 214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType 217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::Constant(const Scalar& value) 218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) 220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return DenseBase<Derived>::NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_constant_op<Scalar>(value)); 221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** 224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \brief Sets a linearly space vector. 225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The function generates 'size' equally spaced values in the closed interval [low,high]. 227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This particular version of LinSpaced() uses sequential access, i.e. vector access is 228c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * assumed to be a(0), a(1), ..., a(size). This assumption allows for better vectorization 229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * and yields faster code than the random access version. 230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * When size is set to 1, a vector of length 1 containing 'high' is returned. 232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 234c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include DenseBase_LinSpaced_seq.cpp 236c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude DenseBase_LinSpaced_seq.out 237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 238c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa setLinSpaced(Index,const Scalar&,const Scalar&), LinSpaced(Index,Scalar,Scalar), CwiseNullaryOp 239c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 240c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::SequentialLinSpacedReturnType 242c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::LinSpaced(Sequential_t, Index size, const Scalar& low, const Scalar& high) 243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) 245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return DenseBase<Derived>::NullaryExpr(size, internal::linspaced_op<Scalar,false>(low,high,size)); 246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 247c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 248c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** 249c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \copydoc DenseBase::LinSpaced(Sequential_t, Index, const Scalar&, const Scalar&) 250c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Special version for fixed size types which does not require the size parameter. 251c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 252c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 253c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::SequentialLinSpacedReturnType 254c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::LinSpaced(Sequential_t, const Scalar& low, const Scalar& high) 255c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 256c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) 257c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) 258c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return DenseBase<Derived>::NullaryExpr(Derived::SizeAtCompileTime, internal::linspaced_op<Scalar,false>(low,high,Derived::SizeAtCompileTime)); 259c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 260c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 261c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** 262c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \brief Sets a linearly space vector. 263c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 264c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The function generates 'size' equally spaced values in the closed interval [low,high]. 265c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * When size is set to 1, a vector of length 1 containing 'high' is returned. 266c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 267c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 268c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 269c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include DenseBase_LinSpaced.cpp 270c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude DenseBase_LinSpaced.out 271c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 272c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa setLinSpaced(Index,const Scalar&,const Scalar&), LinSpaced(Sequential_t,Index,const Scalar&,const Scalar&,Index), CwiseNullaryOp 273c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 274c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 275c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::RandomAccessLinSpacedReturnType 276c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::LinSpaced(Index size, const Scalar& low, const Scalar& high) 277c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 278c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) 279c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return DenseBase<Derived>::NullaryExpr(size, internal::linspaced_op<Scalar,true>(low,high,size)); 280c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 281c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 282c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** 283c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \copydoc DenseBase::LinSpaced(Index, const Scalar&, const Scalar&) 284c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Special version for fixed size types which does not require the size parameter. 285c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 286c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 287c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::RandomAccessLinSpacedReturnType 288c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::LinSpaced(const Scalar& low, const Scalar& high) 289c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 290c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) 291c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) 292c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return DenseBase<Derived>::NullaryExpr(Derived::SizeAtCompileTime, internal::linspaced_op<Scalar,true>(low,high,Derived::SizeAtCompileTime)); 293c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 294c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2957faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez/** \returns true if all coefficients in this matrix are approximately equal to \a val, to within precision \a prec */ 296c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 297c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathbool DenseBase<Derived>::isApproxToConstant 2987faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez(const Scalar& val, const RealScalar& prec) const 299c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 300c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(Index j = 0; j < cols(); ++j) 301c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(Index i = 0; i < rows(); ++i) 3027faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez if(!internal::isApprox(this->coeff(i, j), val, prec)) 303c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return false; 304c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return true; 305c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 306c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 307c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** This is just an alias for isApproxToConstant(). 308c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 309c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \returns true if all coefficients in this matrix are approximately equal to \a value, to within precision \a prec */ 310c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 311c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathbool DenseBase<Derived>::isConstant 3127faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez(const Scalar& val, const RealScalar& prec) const 313c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 3147faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return isApproxToConstant(val, prec); 315c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 316c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 3177faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez/** Alias for setConstant(): sets all coefficients in this expression to \a val. 318c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 319c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa setConstant(), Constant(), class CwiseNullaryOp 320c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 321c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 3227faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezEIGEN_STRONG_INLINE void DenseBase<Derived>::fill(const Scalar& val) 323c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 3247faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez setConstant(val); 325c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 326c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 327c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Sets all coefficients in this expression to \a value. 328c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 329c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa fill(), setConstant(Index,const Scalar&), setConstant(Index,Index,const Scalar&), setZero(), setOnes(), Constant(), class CwiseNullaryOp, setZero(), setOnes() 330c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 331c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 3327faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezEIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setConstant(const Scalar& val) 333c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 3347faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return derived() = Constant(rows(), cols(), val); 335c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 336c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 337c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Resizes to the given \a size, and sets all coefficients in this expression to the given \a value. 338c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 339c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 340c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 341c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include Matrix_setConstant_int.cpp 342c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude Matrix_setConstant_int.out 343c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 344c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::setConstant(const Scalar&), setConstant(Index,Index,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&) 345c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 346c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 347c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& 3487faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezPlainObjectBase<Derived>::setConstant(Index size, const Scalar& val) 349c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 350c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath resize(size); 3517faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return setConstant(val); 352c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 353c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 354c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Resizes to the given size, and sets all coefficients in this expression to the given \a value. 355c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 3567faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \param nbRows the new number of rows 3577faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \param nbCols the new number of columns 3587faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \param val the value to which all coefficients are set 359c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 360c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include Matrix_setConstant_int_int.cpp 361c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude Matrix_setConstant_int_int.out 362c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 363c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::setConstant(const Scalar&), setConstant(Index,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&) 364c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 365c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 366c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& 3677faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezPlainObjectBase<Derived>::setConstant(Index nbRows, Index nbCols, const Scalar& val) 368c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 3697faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez resize(nbRows, nbCols); 3707faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return setConstant(val); 371c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 372c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 373c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** 374c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \brief Sets a linearly space vector. 375c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 376c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The function generates 'size' equally spaced values in the closed interval [low,high]. 377c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * When size is set to 1, a vector of length 1 containing 'high' is returned. 378c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 379c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 380c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 381c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include DenseBase_setLinSpaced.cpp 382c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude DenseBase_setLinSpaced.out 383c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 384c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa CwiseNullaryOp 385c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 386c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 3877faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezEIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setLinSpaced(Index newSize, const Scalar& low, const Scalar& high) 388c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 389c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) 3907faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return derived() = Derived::NullaryExpr(newSize, internal::linspaced_op<Scalar,false>(low,high,newSize)); 391c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 392c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 393c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** 394c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \brief Sets a linearly space vector. 395c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 396c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The function fill *this with equally spaced values in the closed interval [low,high]. 397c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * When size is set to 1, a vector of length 1 containing 'high' is returned. 398c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 399c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 400c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 401c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa setLinSpaced(Index, const Scalar&, const Scalar&), CwiseNullaryOp 402c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 403c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 404c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setLinSpaced(const Scalar& low, const Scalar& high) 405c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 406c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) 407c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return setLinSpaced(size(), low, high); 408c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 409c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 410c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// zero: 411c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 412c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a zero matrix. 413c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 414c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The parameters \a rows and \a cols are the number of rows and of columns of 415c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * the returned matrix. Must be compatible with this MatrixBase type. 416c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 417c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, 418c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used 419c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * instead. 420c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 421c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_zero_int_int.cpp 422c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_zero_int_int.out 423c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 424c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa Zero(), Zero(Index) 425c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 426c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 427c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType 4287faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezDenseBase<Derived>::Zero(Index nbRows, Index nbCols) 429c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 4307faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return Constant(nbRows, nbCols, Scalar(0)); 431c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 432c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 433c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a zero vector. 434c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 435c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * The parameter \a size is the size of the returned vector. 436c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Must be compatible with this MatrixBase type. 437c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 438c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 439c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 440c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is meant to be used for dynamic-size vector types. For fixed-size types, 441c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * it is redundant to pass \a size as argument, so Zero() should be used 442c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * instead. 443c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 444c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_zero_int.cpp 445c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_zero_int.out 446c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 447c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa Zero(), Zero(Index,Index) 448c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 449c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 450c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType 451c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::Zero(Index size) 452c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 453c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return Constant(size, Scalar(0)); 454c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 455c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 456c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a fixed-size zero matrix or vector. 457c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 458c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you 459c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * need to use the variants taking size arguments. 460c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 461c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_zero.cpp 462c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_zero.out 463c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 464c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa Zero(Index), Zero(Index,Index) 465c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 466c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 467c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType 468c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::Zero() 469c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 470c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return Constant(Scalar(0)); 471c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 472c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 473c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns true if *this is approximately equal to the zero matrix, 474c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * within the precision given by \a prec. 475c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 476c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_isZero.cpp 477c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_isZero.out 478c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 479c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp, Zero() 480c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 481c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 4827faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandezbool DenseBase<Derived>::isZero(const RealScalar& prec) const 483c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 484c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(Index j = 0; j < cols(); ++j) 485c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(Index i = 0; i < rows(); ++i) 486c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(!internal::isMuchSmallerThan(this->coeff(i, j), static_cast<Scalar>(1), prec)) 487c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return false; 488c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return true; 489c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 490c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 491c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Sets all coefficients in this expression to zero. 492c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 493c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_setZero.cpp 494c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_setZero.out 495c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 496c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp, Zero() 497c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 498c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 499c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setZero() 500c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 501c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return setConstant(Scalar(0)); 502c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 503c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 504c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Resizes to the given \a size, and sets all coefficients in this expression to zero. 505c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 506c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 507c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 508c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include Matrix_setZero_int.cpp 509c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude Matrix_setZero_int.out 510c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 511c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa DenseBase::setZero(), setZero(Index,Index), class CwiseNullaryOp, DenseBase::Zero() 512c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 513c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 514c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& 5157faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezPlainObjectBase<Derived>::setZero(Index newSize) 516c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 5177faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez resize(newSize); 518c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return setConstant(Scalar(0)); 519c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 520c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 521c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Resizes to the given size, and sets all coefficients in this expression to zero. 522c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 5237faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \param nbRows the new number of rows 5247faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \param nbCols the new number of columns 525c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 526c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include Matrix_setZero_int_int.cpp 527c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude Matrix_setZero_int_int.out 528c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 529c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa DenseBase::setZero(), setZero(Index), class CwiseNullaryOp, DenseBase::Zero() 530c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 531c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 532c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& 5337faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezPlainObjectBase<Derived>::setZero(Index nbRows, Index nbCols) 534c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 5357faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez resize(nbRows, nbCols); 536c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return setConstant(Scalar(0)); 537c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 538c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 539c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// ones: 540c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 541c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a matrix where all coefficients equal one. 542c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 5437faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * The parameters \a nbRows and \a nbCols are the number of rows and of columns of 544c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * the returned matrix. Must be compatible with this MatrixBase type. 545c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 546c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, 547c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * it is redundant to pass \a rows and \a cols as arguments, so Ones() should be used 548c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * instead. 549c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 550c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_ones_int_int.cpp 551c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_ones_int_int.out 552c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 553c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa Ones(), Ones(Index), isOnes(), class Ones 554c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 555c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 556c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType 5577faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezDenseBase<Derived>::Ones(Index nbRows, Index nbCols) 558c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 5597faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return Constant(nbRows, nbCols, Scalar(1)); 560c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 561c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 562c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a vector where all coefficients equal one. 563c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 5647faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * The parameter \a newSize is the size of the returned vector. 565c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Must be compatible with this MatrixBase type. 566c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 567c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 568c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 569c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is meant to be used for dynamic-size vector types. For fixed-size types, 570c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * it is redundant to pass \a size as argument, so Ones() should be used 571c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * instead. 572c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 573c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_ones_int.cpp 574c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_ones_int.out 575c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 576c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa Ones(), Ones(Index,Index), isOnes(), class Ones 577c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 578c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 579c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType 5807faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezDenseBase<Derived>::Ones(Index newSize) 581c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 5827faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return Constant(newSize, Scalar(1)); 583c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 584c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 585c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of a fixed-size matrix or vector where all coefficients equal one. 586c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 587c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you 588c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * need to use the variants taking size arguments. 589c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 590c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_ones.cpp 591c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_ones.out 592c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 593c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa Ones(Index), Ones(Index,Index), isOnes(), class Ones 594c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 595c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 596c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType 597c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathDenseBase<Derived>::Ones() 598c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 599c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return Constant(Scalar(1)); 600c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 601c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 602c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns true if *this is approximately equal to the matrix where all coefficients 603c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * are equal to 1, within the precision given by \a prec. 604c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 605c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_isOnes.cpp 606c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_isOnes.out 607c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 608c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp, Ones() 609c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 610c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 611c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathbool DenseBase<Derived>::isOnes 6127faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez(const RealScalar& prec) const 613c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 614c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return isApproxToConstant(Scalar(1), prec); 615c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 616c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 617c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Sets all coefficients in this expression to one. 618c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 619c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_setOnes.cpp 620c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_setOnes.out 621c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 622c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp, Ones() 623c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 624c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 625c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setOnes() 626c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 627c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return setConstant(Scalar(1)); 628c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 629c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 6307faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez/** Resizes to the given \a newSize, and sets all coefficients in this expression to one. 631c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 632c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 633c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 634c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include Matrix_setOnes_int.cpp 635c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude Matrix_setOnes_int.out 636c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 637c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::setOnes(), setOnes(Index,Index), class CwiseNullaryOp, MatrixBase::Ones() 638c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 639c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 640c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& 6417faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezPlainObjectBase<Derived>::setOnes(Index newSize) 642c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 6437faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez resize(newSize); 644c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return setConstant(Scalar(1)); 645c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 646c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 647c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Resizes to the given size, and sets all coefficients in this expression to one. 648c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 6497faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \param nbRows the new number of rows 6507faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \param nbCols the new number of columns 651c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 652c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include Matrix_setOnes_int_int.cpp 653c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude Matrix_setOnes_int_int.out 654c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 655c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::setOnes(), setOnes(Index), class CwiseNullaryOp, MatrixBase::Ones() 656c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 657c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 658c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& 6597faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezPlainObjectBase<Derived>::setOnes(Index nbRows, Index nbCols) 660c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 6617faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez resize(nbRows, nbCols); 662c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return setConstant(Scalar(1)); 663c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 664c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 665c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Identity: 666c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 667c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of the identity matrix (not necessarily square). 668c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 6697faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * The parameters \a nbRows and \a nbCols are the number of rows and of columns of 670c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * the returned matrix. Must be compatible with this MatrixBase type. 671c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 672c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is meant to be used for dynamic-size matrix types. For fixed-size types, 673c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * it is redundant to pass \a rows and \a cols as arguments, so Identity() should be used 674c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * instead. 675c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 676c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_identity_int_int.cpp 677c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_identity_int_int.out 678c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 679c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa Identity(), setIdentity(), isIdentity() 680c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 681c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 682c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename MatrixBase<Derived>::IdentityReturnType 6837faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezMatrixBase<Derived>::Identity(Index nbRows, Index nbCols) 684c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 6857faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return DenseBase<Derived>::NullaryExpr(nbRows, nbCols, internal::scalar_identity_op<Scalar>()); 686c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 687c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 688c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of the identity matrix (not necessarily square). 689c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 690c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you 691c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * need to use the variant taking size arguments. 692c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 693c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_identity.cpp 694c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_identity.out 695c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 696c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa Identity(Index,Index), setIdentity(), isIdentity() 697c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 698c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 699c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename MatrixBase<Derived>::IdentityReturnType 700c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathMatrixBase<Derived>::Identity() 701c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 702c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived) 703c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return MatrixBase<Derived>::NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_identity_op<Scalar>()); 704c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 705c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 706c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns true if *this is approximately equal to the identity matrix 707c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * (not necessarily square), 708c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * within the precision given by \a prec. 709c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 710c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_isIdentity.cpp 711c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_isIdentity.out 712c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 713c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp, Identity(), Identity(Index,Index), setIdentity() 714c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 715c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 716c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathbool MatrixBase<Derived>::isIdentity 7177faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez(const RealScalar& prec) const 718c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 719c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(Index j = 0; j < cols(); ++j) 720c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 721c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(Index i = 0; i < rows(); ++i) 722c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 723c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(i == j) 724c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 725c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(!internal::isApprox(this->coeff(i, j), static_cast<Scalar>(1), prec)) 726c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return false; 727c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 728c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath else 729c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 730c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if(!internal::isMuchSmallerThan(this->coeff(i, j), static_cast<RealScalar>(1), prec)) 731c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return false; 732c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 733c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 734c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 735c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return true; 736c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 737c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 738c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 739c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 740c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived, bool Big = (Derived::SizeAtCompileTime>=16)> 741c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct setIdentity_impl 742c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 743c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static EIGEN_STRONG_INLINE Derived& run(Derived& m) 744c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 745c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m = Derived::Identity(m.rows(), m.cols()); 746c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 747c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 748c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 749c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 750c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct setIdentity_impl<Derived, true> 751c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 752c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename Derived::Index Index; 753c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath static EIGEN_STRONG_INLINE Derived& run(Derived& m) 754c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 755c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath m.setZero(); 756c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Index size = (std::min)(m.rows(), m.cols()); 757c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for(Index i = 0; i < size; ++i) m.coeffRef(i,i) = typename Derived::Scalar(1); 758c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m; 759c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 760c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 761c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 762c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace internal 763c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 764c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** Writes the identity expression (not necessarily square) into *this. 765c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 766c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include MatrixBase_setIdentity.cpp 767c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude MatrixBase_setIdentity.out 768c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 769c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa class CwiseNullaryOp, Identity(), Identity(Index,Index), isIdentity() 770c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 771c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 772c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setIdentity() 773c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 774c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return internal::setIdentity_impl<Derived>::run(derived()); 775c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 776c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 777c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \brief Resizes to the given size, and writes the identity expression (not necessarily square) into *this. 778c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 7797faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \param nbRows the new number of rows 7807faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \param nbCols the new number of columns 781c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 782c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Example: \include Matrix_setIdentity_int_int.cpp 783c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * Output: \verbinclude Matrix_setIdentity_int_int.out 784c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 785c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::setIdentity(), class CwiseNullaryOp, MatrixBase::Identity() 786c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 787c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 7887faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezEIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setIdentity(Index nbRows, Index nbCols) 789c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 7907faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez derived().resize(nbRows, nbCols); 791c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return setIdentity(); 792c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 793c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 794c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of the i-th unit (basis) vector. 795c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 796c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 797c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 798c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::Unit(Index), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() 799c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 800c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 8017faaa9f3f0df9d23790277834d426c3d992ac3baCarlos HernandezEIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::Unit(Index newSize, Index i) 802c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 803c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) 8047faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return BasisReturnType(SquareMatrixType::Identity(newSize,newSize), i); 805c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 806c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 807c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of the i-th unit (basis) vector. 808c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 809c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 810c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 811c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This variant is for fixed-size vector only. 812c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 813c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::Unit(Index,Index), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() 814c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 815c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 816c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::Unit(Index i) 817c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 818c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived) 819c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return BasisReturnType(SquareMatrixType::Identity(),i); 820c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 821c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 822c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of the X axis unit vector (1{,0}^*) 823c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 824c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 825c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 826c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() 827c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 828c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 829c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::UnitX() 830c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ return Derived::Unit(0); } 831c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 832c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of the Y axis unit vector (0,1{,0}^*) 833c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 834c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 835c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 836c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() 837c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 838c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 839c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::UnitY() 840c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ return Derived::Unit(1); } 841c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 842c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of the Z axis unit vector (0,0,1{,0}^*) 843c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 844c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 845c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 846c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() 847c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 848c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 849c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::UnitZ() 850c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ return Derived::Unit(2); } 851c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 852c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \returns an expression of the W axis unit vector (0,0,0,1) 853c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 854c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \only_for_vectors 855c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 856c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW() 857c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 858c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> 859c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::UnitW() 860c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ return Derived::Unit(3); } 861c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 862c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace Eigen 863c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 864c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // EIGEN_CWISE_NULLARY_OP_H 865