10 #ifndef EIGEN_AUTODIFF_JACOBIAN_H 11 #define EIGEN_AUTODIFF_JACOBIAN_H 16 template<
typename Functor>
class AutoDiffJacobian :
public Functor
19 AutoDiffJacobian() : Functor() {}
20 AutoDiffJacobian(
const Functor& f) : Functor(f) {}
23 #if EIGEN_HAS_VARIADIC_TEMPLATES 24 template<
typename... T>
25 AutoDiffJacobian(
const T& ...Values) : Functor(Values...) {}
28 AutoDiffJacobian(
const T0& a0) : Functor(a0) {}
29 template<
typename T0,
typename T1>
30 AutoDiffJacobian(
const T0& a0,
const T1& a1) : Functor(a0, a1) {}
31 template<
typename T0,
typename T1,
typename T2>
32 AutoDiffJacobian(
const T0& a0,
const T1& a1,
const T2& a2) : Functor(a0, a1, a2) {}
35 typedef typename Functor::InputType InputType;
36 typedef typename Functor::ValueType ValueType;
37 typedef typename ValueType::Scalar Scalar;
40 InputsAtCompileTime = InputType::RowsAtCompileTime,
41 ValuesAtCompileTime = ValueType::RowsAtCompileTime
44 typedef Matrix<Scalar, ValuesAtCompileTime, InputsAtCompileTime> JacobianType;
47 typedef Matrix<Scalar, InputsAtCompileTime, 1> DerivativeType;
48 typedef AutoDiffScalar<DerivativeType> ActiveScalar;
50 typedef Matrix<ActiveScalar, InputsAtCompileTime, 1> ActiveInput;
51 typedef Matrix<ActiveScalar, ValuesAtCompileTime, 1> ActiveValue;
53 #if EIGEN_HAS_VARIADIC_TEMPLATES 57 void operator() (
const InputType& x, ValueType* v)
const 59 this->operator()(x, v, 0);
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());
85 if(InputsAtCompileTime==
Dynamic)
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++)
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 Namespace containing all symbols from the Eigen library.
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
static const BasisReturnType Unit(Index size, Index i)