10 #ifndef EIGEN_AUTODIFF_JACOBIAN_H 11 #define EIGEN_AUTODIFF_JACOBIAN_H 23 #if EIGEN_HAS_VARIADIC_TEMPLATES 24 template<
typename... T>
29 template<
typename T0,
typename T1>
31 template<
typename T0,
typename T1,
typename T2>
37 typedef typename ValueType::Scalar
Scalar;
53 #if EIGEN_HAS_VARIADIC_TEMPLATES 57 void operator() (
const InputType& x, ValueType* v)
const 61 template<
typename... ParamsType>
62 void operator() (
const InputType& x, ValueType* v, JacobianType* _jac,
63 const ParamsType&... Params)
const 65 void operator() (
const InputType& x, ValueType* v, JacobianType* _jac=0) const
72 #if EIGEN_HAS_VARIADIC_TEMPLATES 73 Functor::operator()(x, v, Params...);
75 Functor::operator()(x, v);
80 JacobianType& jac = *_jac;
82 ActiveInput ax = x.template cast<ActiveScalar>();
83 ActiveValue av(jac.
rows());
86 for (Index j=0; j<jac.
rows(); j++)
87 av[j].derivatives().
resize(x.rows());
89 for (Index i=0; i<jac.
cols(); i++)
90 ax[i].derivatives() = DerivativeType::Unit(x.rows(),i);
92 #if EIGEN_HAS_VARIADIC_TEMPLATES 93 Functor::operator()(ax, &av, Params...);
95 Functor::operator()(ax, &av);
98 for (Index i=0; i<jac.
rows(); i++)
100 (*v)[i] = av[i].value();
101 jac.row(i) = av[i].derivatives();
108 #endif // EIGEN_AUTODIFF_JACOBIAN_H EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index cols() const
AutoDiffJacobian(const T0 &a0)
#define EIGEN_STRONG_INLINE
JacobianType::Index Index
Matrix< ActiveScalar, ValuesAtCompileTime, 1 > ActiveValue
A scalar type replacement with automatic differentation capability.
AutoDiffJacobian(const Functor &f)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rows() const
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Matrix< Scalar, InputsAtCompileTime, 1 > DerivativeType
Matrix< Scalar, InputsAtCompileTime, 1 > InputType
AutoDiffScalar< DerivativeType > ActiveScalar
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
Matrix< Scalar, ValuesAtCompileTime, 1 > ValueType
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Matrix< ActiveScalar, InputsAtCompileTime, 1 > ActiveInput
Functor::InputType InputType
AutoDiffJacobian(const T0 &a0, const T1 &a1, const T2 &a2)
Functor::ValueType ValueType
void operator()(const InputType &x, ValueType *v, JacobianType *_jac=0) const
AutoDiffJacobian(const T0 &a0, const T1 &a1)
The matrix class, also used for vectors and row-vectors.
Matrix< Scalar, ValuesAtCompileTime, InputsAtCompileTime > JacobianType