10 #ifndef EIGEN_AUTODIFF_SCALAR_H
11 #define EIGEN_AUTODIFF_SCALAR_H
13 #include "./InternalHeaderCheck.h"
19 template<
typename A,
typename B>
20 struct make_coherent_impl {
21 static void run(A&, B&) {}
25 template<
typename A,
typename B>
26 void make_coherent(
const A& a,
const B&b)
28 make_coherent_impl<A,B>::run(a.const_cast_derived(), b.const_cast_derived());
31 template<
typename DerivativeType,
bool Enable>
struct auto_diff_special_op;
35 template<
typename DerivativeType>
class AutoDiffScalar;
37 template<
typename NewDerType>
38 inline AutoDiffScalar<NewDerType> MakeAutoDiffScalar(
const typename NewDerType::Scalar& value,
const NewDerType &der) {
39 return AutoDiffScalar<NewDerType>(value,der);
68 template<
typename DerivativeType>
70 :
public internal::auto_diff_special_op
71 <DerivativeType, !internal::is_same<typename internal::traits<internal::remove_all_t<DerivativeType>>::Scalar,
72 typename NumTraits<typename internal::traits<internal::remove_all_t<DerivativeType>>::Scalar>::Real>::value>
75 typedef internal::auto_diff_special_op
76 <DerivativeType, !internal::is_same<typename internal::traits<internal::remove_all_t<DerivativeType>>::Scalar,
78 typedef internal::remove_all_t<DerivativeType> DerType;
79 typedef typename internal::traits<DerType>::Scalar Scalar;
82 using Base::operator+;
83 using Base::operator*;
91 : m_value(value), m_derivatives(DerType::Zero(nbDer))
93 m_derivatives.coeffRef(derNumber) = Scalar(1);
101 if(m_derivatives.size()>0)
102 m_derivatives.setZero();
107 : m_value(value), m_derivatives(der)
110 template<
typename OtherDerType>
112 #ifndef EIGEN_PARSED_BY_DOXYGEN
114 internal::is_same<Scalar,
typename internal::traits<internal::remove_all_t<OtherDerType>>::Scalar>::value
115 && internal::is_convertible<OtherDerType,DerType>::value ,
void*> = 0
118 : m_value(other.value()), m_derivatives(other.derivatives())
121 friend std::ostream & operator << (std::ostream & s,
const AutoDiffScalar& a)
123 return s << a.value();
127 : m_value(other.value()), m_derivatives(other.derivatives())
130 template<
typename OtherDerType>
131 inline AutoDiffScalar& operator=(
const AutoDiffScalar<OtherDerType>& other)
133 m_value = other.value();
134 m_derivatives = other.derivatives();
140 m_value = other.value();
141 m_derivatives = other.derivatives();
148 if(m_derivatives.size()>0)
149 m_derivatives.setZero();
156 inline const Scalar& value()
const {
return m_value; }
157 inline Scalar& value() {
return m_value; }
159 inline const DerType& derivatives()
const {
return m_derivatives; }
160 inline DerType& derivatives() {
return m_derivatives; }
162 inline bool operator< (
const Scalar& other)
const {
return m_value < other; }
163 inline bool operator<=(
const Scalar& other)
const {
return m_value <= other; }
164 inline bool operator> (
const Scalar& other)
const {
return m_value > other; }
165 inline bool operator>=(
const Scalar& other)
const {
return m_value >= other; }
166 inline bool operator==(
const Scalar& other)
const {
return m_value == other; }
167 inline bool operator!=(
const Scalar& other)
const {
return m_value != other; }
169 friend inline bool operator< (
const Scalar& a,
const AutoDiffScalar& b) {
return a < b.value(); }
170 friend inline bool operator<=(
const Scalar& a,
const AutoDiffScalar& b) {
return a <= b.value(); }
171 friend inline bool operator> (
const Scalar& a,
const AutoDiffScalar& b) {
return a > b.value(); }
172 friend inline bool operator>=(
const Scalar& a,
const AutoDiffScalar& b) {
return a >= b.value(); }
173 friend inline bool operator==(
const Scalar& a,
const AutoDiffScalar& b) {
return a == b.value(); }
174 friend inline bool operator!=(
const Scalar& a,
const AutoDiffScalar& b) {
return a != b.value(); }
176 template<
typename OtherDerType>
inline bool operator< (
const AutoDiffScalar<OtherDerType>& b)
const {
return m_value < b.value(); }
177 template<
typename OtherDerType>
inline bool operator<=(
const AutoDiffScalar<OtherDerType>& b)
const {
return m_value <= b.value(); }
178 template<
typename OtherDerType>
inline bool operator> (
const AutoDiffScalar<OtherDerType>& b)
const {
return m_value > b.value(); }
179 template<
typename OtherDerType>
inline bool operator>=(
const AutoDiffScalar<OtherDerType>& b)
const {
return m_value >= b.value(); }
180 template<
typename OtherDerType>
inline bool operator==(
const AutoDiffScalar<OtherDerType>& b)
const {
return m_value == b.value(); }
181 template<
typename OtherDerType>
inline bool operator!=(
const AutoDiffScalar<OtherDerType>& b)
const {
return m_value != b.value(); }
183 inline AutoDiffScalar<DerType&> operator+(
const Scalar& other)
const
185 return AutoDiffScalar<DerType&>(m_value + other, m_derivatives);
188 friend inline AutoDiffScalar<DerType&> operator+(
const Scalar& a,
const AutoDiffScalar& b)
190 return AutoDiffScalar<DerType&>(a + b.value(), b.derivatives());
209 template<
typename OtherDerType>
210 inline AutoDiffScalar<CwiseBinaryOp<internal::scalar_sum_op<Scalar>,
const DerType,
const internal::remove_all_t<OtherDerType>> >
211 operator+(
const AutoDiffScalar<OtherDerType>& other)
const
213 internal::make_coherent(m_derivatives, other.derivatives());
214 return AutoDiffScalar<CwiseBinaryOp<internal::scalar_sum_op<Scalar>,
const DerType,
const internal::remove_all_t<OtherDerType>> >(
215 m_value + other.value(),
216 m_derivatives + other.derivatives());
219 template<
typename OtherDerType>
221 operator+=(
const AutoDiffScalar<OtherDerType>& other)
223 (*this) = (*this) + other;
227 inline AutoDiffScalar<DerType&> operator-(
const Scalar& b)
const
229 return AutoDiffScalar<DerType&>(m_value - b, m_derivatives);
232 friend inline AutoDiffScalar<CwiseUnaryOp<internal::scalar_opposite_op<Scalar>,
const DerType> >
235 return AutoDiffScalar<CwiseUnaryOp<internal::scalar_opposite_op<Scalar>,
const DerType> >
236 (a - b.value(), -b.derivatives());
245 template<
typename OtherDerType>
246 inline AutoDiffScalar<CwiseBinaryOp<internal::scalar_difference_op<Scalar>,
const DerType,
const internal::remove_all_t<OtherDerType>> >
247 operator-(
const AutoDiffScalar<OtherDerType>& other)
const
249 internal::make_coherent(m_derivatives, other.derivatives());
250 return AutoDiffScalar<CwiseBinaryOp<internal::scalar_difference_op<Scalar>,
const DerType,
const internal::remove_all_t<OtherDerType>> >(
251 m_value - other.value(),
252 m_derivatives - other.derivatives());
255 template<
typename OtherDerType>
257 operator-=(
const AutoDiffScalar<OtherDerType>& other)
259 *
this = *
this - other;
263 inline AutoDiffScalar<CwiseUnaryOp<internal::scalar_opposite_op<Scalar>,
const DerType> >
266 return AutoDiffScalar<CwiseUnaryOp<internal::scalar_opposite_op<Scalar>,
const DerType> >(
271 inline AutoDiffScalar<EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(DerType,Scalar,product) >
272 operator*(
const Scalar& other)
const
274 return MakeAutoDiffScalar(m_value * other, m_derivatives * other);
277 friend inline AutoDiffScalar<EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(DerType,Scalar,product) >
280 return MakeAutoDiffScalar(a.value() * other, a.derivatives() * other);
299 inline AutoDiffScalar<EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(DerType,Scalar,product) >
300 operator/(
const Scalar& other)
const
302 return MakeAutoDiffScalar(m_value / other, (m_derivatives * (Scalar(1)/other)));
305 friend inline AutoDiffScalar<EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(DerType,Scalar,product) >
308 return MakeAutoDiffScalar(other / a.value(), a.derivatives() * (Scalar(-other) / (a.value()*a.value())));
327 template<
typename OtherDerType>
329 CwiseBinaryOp<internal::scalar_difference_op<Scalar> EIGEN_COMMA
330 const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(DerType,Scalar,product) EIGEN_COMMA
331 const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(internal::remove_all_t<OtherDerType>,Scalar,product) >,Scalar,product) >
332 operator/(
const AutoDiffScalar<OtherDerType>& other)
const
334 internal::make_coherent(m_derivatives, other.derivatives());
335 return MakeAutoDiffScalar(
336 m_value / other.value(),
337 ((m_derivatives * other.value()) - (other.derivatives() * m_value))
338 * (Scalar(1)/(other.value()*other.value())));
341 template<
typename OtherDerType>
342 inline AutoDiffScalar<CwiseBinaryOp<internal::scalar_sum_op<Scalar>,
343 const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(DerType,Scalar,product),
344 const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(internal::remove_all_t<OtherDerType>,Scalar,product) > >
345 operator*(
const AutoDiffScalar<OtherDerType>& other)
const
347 internal::make_coherent(m_derivatives, other.derivatives());
348 return MakeAutoDiffScalar(
349 m_value * other.value(),
350 (m_derivatives * other.value()) + (other.derivatives() * m_value));
355 *
this = *
this * other;
359 template<
typename OtherDerType>
360 inline AutoDiffScalar& operator*=(
const AutoDiffScalar<OtherDerType>& other)
362 *
this = *
this * other;
368 *
this = *
this / other;
372 template<
typename OtherDerType>
373 inline AutoDiffScalar& operator/=(
const AutoDiffScalar<OtherDerType>& other)
375 *
this = *
this / other;
381 DerType m_derivatives;
387 template<
typename DerivativeType>
388 struct auto_diff_special_op<DerivativeType, true>
392 typedef remove_all_t<DerivativeType> DerType;
393 typedef typename traits<DerType>::Scalar Scalar;
394 typedef typename NumTraits<Scalar>::Real Real;
406 const AutoDiffScalar<DerivativeType>& derived()
const {
return *
static_cast<const AutoDiffScalar<DerivativeType>*
>(
this); }
407 AutoDiffScalar<DerivativeType>& derived() {
return *
static_cast<AutoDiffScalar<DerivativeType>*
>(
this); }
410 inline AutoDiffScalar<DerType&> operator+(
const Real& other)
const
412 return AutoDiffScalar<DerType&>(derived().value() + other, derived().derivatives());
415 friend inline AutoDiffScalar<DerType&> operator+(
const Real& a,
const AutoDiffScalar<DerivativeType>& b)
417 return AutoDiffScalar<DerType&>(a + b.value(), b.derivatives());
420 inline AutoDiffScalar<DerivativeType>& operator+=(
const Real& other)
422 derived().value() += other;
427 inline AutoDiffScalar<typename CwiseUnaryOp<bind2nd_op<scalar_product_op<Scalar,Real> >, DerType>::Type >
430 return AutoDiffScalar<typename CwiseUnaryOp<bind2nd_op<scalar_product_op<Scalar,Real> >, DerType>::Type >(
431 derived().value() * other,
432 derived().derivatives() * other);
435 friend inline AutoDiffScalar<typename CwiseUnaryOp<bind1st_op<scalar_product_op<Real,Scalar> >, DerType>::Type >
436 operator*(
const Real& other,
const AutoDiffScalar<DerivativeType>& a)
438 return AutoDiffScalar<typename CwiseUnaryOp<bind1st_op<scalar_product_op<Real,Scalar> >, DerType>::Type >(
440 a.derivatives() * other);
443 inline AutoDiffScalar<DerivativeType>& operator*=(
const Scalar& other)
445 *
this = *
this * other;
450 template<
typename DerivativeType>
451 struct auto_diff_special_op<DerivativeType, false>
454 void operator-()
const;
455 void operator+()
const;
458 template<
typename BinOp,
typename A,
typename B,
typename RefType>
459 void make_coherent_expression(CwiseBinaryOp<BinOp,A,B> xpr,
const RefType &ref)
461 make_coherent(xpr.const_cast_derived().lhs(), ref);
462 make_coherent(xpr.const_cast_derived().rhs(), ref);
465 template<
typename UnaryOp,
typename A,
typename RefType>
466 void make_coherent_expression(
const CwiseUnaryOp<UnaryOp,A> &xpr,
const RefType &ref)
468 make_coherent(xpr.nestedExpression().const_cast_derived(), ref);
472 template<
typename UnaryOp,
typename A,
typename RefType>
473 void make_coherent_expression(
const CwiseNullaryOp<UnaryOp,A> &,
const RefType &)
476 template<
typename A_Scalar,
int A_Rows,
int A_Cols,
int A_Options,
int A_MaxRows,
int A_MaxCols,
typename B>
477 struct make_coherent_impl<Matrix<A_Scalar, A_Rows, A_Cols, A_Options, A_MaxRows, A_MaxCols>, B> {
478 typedef Matrix<A_Scalar, A_Rows, A_Cols, A_Options, A_MaxRows, A_MaxCols> A;
479 static void run(A& a, B& b) {
485 else if (B::SizeAtCompileTime==
Dynamic && a.size()!=0 && b.size()==0)
487 make_coherent_expression(b,a);
492 template<
typename A,
typename B_Scalar,
int B_Rows,
int B_Cols,
int B_Options,
int B_MaxRows,
int B_MaxCols>
493 struct make_coherent_impl<A, Matrix<B_Scalar, B_Rows, B_Cols, B_Options, B_MaxRows, B_MaxCols> > {
494 typedef Matrix<B_Scalar, B_Rows, B_Cols, B_Options, B_MaxRows, B_MaxCols> B;
495 static void run(A& a, B& b) {
501 else if (A::SizeAtCompileTime==
Dynamic && b.size()!=0 && a.size()==0)
503 make_coherent_expression(a,b);
508 template<
typename A_Scalar,
int A_Rows,
int A_Cols,
int A_Options,
int A_MaxRows,
int A_MaxCols,
509 typename B_Scalar,
int B_Rows,
int B_Cols,
int B_Options,
int B_MaxRows,
int B_MaxCols>
510 struct make_coherent_impl<Matrix<A_Scalar, A_Rows, A_Cols, A_Options, A_MaxRows, A_MaxCols>,
511 Matrix<B_Scalar, B_Rows, B_Cols, B_Options, B_MaxRows, B_MaxCols> > {
512 typedef Matrix<A_Scalar, A_Rows, A_Cols, A_Options, A_MaxRows, A_MaxCols> A;
513 typedef Matrix<B_Scalar, B_Rows, B_Cols, B_Options, B_MaxRows, B_MaxCols> B;
514 static void run(A& a, B& b) {
530 template<
typename DerType,
typename BinOp>
531 struct ScalarBinaryOpTraits<AutoDiffScalar<DerType>,typename DerType::Scalar,BinOp>
533 typedef AutoDiffScalar<DerType> ReturnType;
536 template<
typename DerType,
typename BinOp>
537 struct ScalarBinaryOpTraits<typename DerType::Scalar,AutoDiffScalar<DerType>, BinOp>
539 typedef AutoDiffScalar<DerType> ReturnType;
559 #define EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(FUNC,CODE) \
560 template<typename DerType> \
561 inline Eigen::AutoDiffScalar< \
562 EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(Eigen::internal::remove_all_t<DerType>, typename Eigen::internal::traits<Eigen::internal::remove_all_t<DerType>>::Scalar, product) > \
563 FUNC(const Eigen::AutoDiffScalar<DerType>& x) { \
564 using namespace Eigen; \
565 typedef typename Eigen::internal::traits<Eigen::internal::remove_all_t<DerType>>::Scalar Scalar; \
566 EIGEN_UNUSED_VARIABLE(sizeof(Scalar)); \
570 template<
typename DerType>
571 struct CleanedUpDerType {
572 typedef AutoDiffScalar<typename Eigen::internal::remove_all_t<DerType>::PlainObject> type;
575 template<
typename DerType>
576 inline const AutoDiffScalar<DerType>&
conj(
const AutoDiffScalar<DerType>& x) {
return x; }
577 template<
typename DerType>
578 inline const AutoDiffScalar<DerType>&
real(
const AutoDiffScalar<DerType>& x) {
return x; }
579 template<
typename DerType>
580 inline typename DerType::Scalar
imag(
const AutoDiffScalar<DerType>&) {
return 0.; }
581 template<
typename DerType,
typename T>
582 inline typename CleanedUpDerType<DerType>::type (min)(
const AutoDiffScalar<DerType>& x,
const T& y) {
583 typedef typename CleanedUpDerType<DerType>::type ADS;
584 return (x <= y ? ADS(x) : ADS(y));
586 template<
typename DerType,
typename T>
587 inline typename CleanedUpDerType<DerType>::type (max)(
const AutoDiffScalar<DerType>& x,
const T& y) {
588 typedef typename CleanedUpDerType<DerType>::type ADS;
589 return (x >= y ? ADS(x) : ADS(y));
591 template<
typename DerType,
typename T>
592 inline typename CleanedUpDerType<DerType>::type (min)(
const T& x,
const AutoDiffScalar<DerType>& y) {
593 typedef typename CleanedUpDerType<DerType>::type ADS;
594 return (x < y ? ADS(x) : ADS(y));
596 template<
typename DerType,
typename T>
597 inline typename CleanedUpDerType<DerType>::type (max)(
const T& x,
const AutoDiffScalar<DerType>& y) {
598 typedef typename CleanedUpDerType<DerType>::type ADS;
599 return (x > y ? ADS(x) : ADS(y));
601 template<
typename DerType>
602 inline typename CleanedUpDerType<DerType>::type (min)(
const AutoDiffScalar<DerType>& x,
const AutoDiffScalar<DerType>& y) {
603 return (x.value() < y.value() ? x : y);
605 template<
typename DerType>
606 inline typename CleanedUpDerType<DerType>::type (max)(
const AutoDiffScalar<DerType>& x,
const AutoDiffScalar<DerType>& y) {
607 return (x.value() >= y.value() ? x : y);
611 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
abs,
613 return Eigen::MakeAutoDiffScalar(
abs(x.value()), x.derivatives() * (x.value()<0 ? -1 : 1) );)
615 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
abs2,
617 return Eigen::MakeAutoDiffScalar(
abs2(x.value()), x.derivatives() * (Scalar(2)*x.value()));)
619 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
sqrt,
621 Scalar sqrtx =
sqrt(x.value());
622 return Eigen::MakeAutoDiffScalar(sqrtx,x.derivatives() * (Scalar(0.5) / sqrtx));)
624 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
cos,
627 return Eigen::MakeAutoDiffScalar(
cos(x.value()), x.derivatives() * (-
sin(x.value())));)
629 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
sin,
632 return Eigen::MakeAutoDiffScalar(
sin(x.value()),x.derivatives() *
cos(x.value()));)
634 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
exp,
636 Scalar expx =
exp(x.value());
637 return Eigen::MakeAutoDiffScalar(expx,x.derivatives() * expx);)
639 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
log,
641 return Eigen::MakeAutoDiffScalar(
log(x.value()),x.derivatives() * (Scalar(1)/x.value()));)
643 template<typename DerType>
645 EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(internal::remove_all_t<DerType>,
typename internal::traits<internal::remove_all_t<DerType>>::Scalar,product) >
648 using namespace Eigen;
650 return Eigen::MakeAutoDiffScalar(pow(x.value(),y), x.derivatives() * (y * pow(x.value(),y-1)));
654 template<
typename DerTypeA,
typename DerTypeB>
659 typedef typename internal::traits<internal::remove_all_t<DerTypeA>>::Scalar Scalar;
662 ret.value() = atan2(a.value(), b.value());
664 Scalar squared_hypot = a.value() * a.value() + b.value() * b.value();
667 ret.derivatives() = (a.derivatives() * b.value() - a.value() * b.derivatives()) / squared_hypot;
672 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
tan,
675 return Eigen::MakeAutoDiffScalar(
tan(x.value()),x.derivatives() * (Scalar(1)/numext::abs2(
cos(x.value()))));)
677 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
asin,
680 return Eigen::MakeAutoDiffScalar(
asin(x.value()),x.derivatives() * (Scalar(1)/
sqrt(1-numext::abs2(x.value()))));)
682 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
acos,
685 return Eigen::MakeAutoDiffScalar(
acos(x.value()),x.derivatives() * (Scalar(-1)/
sqrt(1-numext::abs2(x.value()))));)
687 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
tanh,
690 return Eigen::MakeAutoDiffScalar(
tanh(x.value()),x.derivatives() * (Scalar(1)/numext::abs2(
cosh(x.value()))));)
692 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
sinh,
695 return Eigen::MakeAutoDiffScalar(
sinh(x.value()),x.derivatives() *
cosh(x.value()));)
697 EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY(
cosh,
700 return Eigen::MakeAutoDiffScalar(
cosh(x.value()),x.derivatives() *
sinh(x.value()));)
702 #undef EIGEN_AUTODIFF_DECLARE_GLOBAL_UNARY
705 :
NumTraits<
typename NumTraits<
typename internal::remove_all_t<DerType>::Scalar>::Real >
707 typedef internal::remove_all_t<DerType> DerTypeCleaned;
709 0, DerTypeCleaned::MaxRowsAtCompileTime, DerTypeCleaned::MaxColsAtCompileTime> > Real;
714 RequireInitialization = 1
722 template <
typename T>
724 :
public numeric_limits<typename T::Scalar> {};
726 template <
typename T>
728 :
public numeric_limits<typename T::Scalar> {};
A scalar type replacement with automatic differentiation capability.
Definition: AutoDiffScalar.h:73
AutoDiffScalar()
Definition: AutoDiffScalar.h:86
AutoDiffScalar(const Scalar &value, int nbDer, int derNumber)
Definition: AutoDiffScalar.h:90
AutoDiffScalar(const Real &value)
Definition: AutoDiffScalar.h:98
AutoDiffScalar(const Scalar &value, const DerType &der)
Definition: AutoDiffScalar.h:106
Namespace containing all symbols from the Eigen library.
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_tanh_op< typename Derived::Scalar >, const Derived > tanh(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_imag_op< typename Derived::Scalar >, const Derived > imag(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_cosh_op< typename Derived::Scalar >, const Derived > cosh(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_tan_op< typename Derived::Scalar >, const Derived > tan(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_acos_op< typename Derived::Scalar >, const Derived > acos(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_abs2_op< typename Derived::Scalar >, const Derived > abs2(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_asin_op< typename Derived::Scalar >, const Derived > asin(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_conjugate_op< typename Derived::Scalar >, const Derived > conj(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_real_op< typename Derived::Scalar >, const Derived > real(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_cos_op< typename Derived::Scalar >, const Derived > cos(const Eigen::ArrayBase< Derived > &x)
const Product< Inverse< PermutationType >, SparseDerived, AliasFreeProduct > operator*(const InverseImpl< PermutationType, PermutationStorage > &tperm, const SparseMatrixBase< SparseDerived > &matrix)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_abs_op< typename Derived::Scalar >, const Derived > abs(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_exp_op< typename Derived::Scalar >, const Derived > exp(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_sin_op< typename Derived::Scalar >, const Derived > sin(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_log_op< typename Derived::Scalar >, const Derived > log(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_sinh_op< typename Derived::Scalar >, const Derived > sinh(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_sqrt_op< typename Derived::Scalar >, const Derived > sqrt(const Eigen::ArrayBase< Derived > &x)