13 #ifndef EIGEN_NUMERICAL_DIFF_H
14 #define EIGEN_NUMERICAL_DIFF_H
16 #include "./InternalHeaderCheck.h"
20 enum NumericalDiffMode {
37 template<
typename Functor_, NumericalDiffMode mode=Forward>
41 typedef Functor_ Functor;
42 typedef typename Functor::Scalar Scalar;
43 typedef typename Functor::InputType InputType;
44 typedef typename Functor::ValueType ValueType;
45 typedef typename Functor::JacobianType JacobianType;
47 NumericalDiff(Scalar _epsfcn=0.) : Functor(), epsfcn(_epsfcn) {}
48 NumericalDiff(
const Functor& f, Scalar _epsfcn=0.) : Functor(f), epsfcn(_epsfcn) {}
53 template<
typename T0,
typename T1>
54 NumericalDiff(
const T0& a0,
const T1& a1) : Functor(a0, a1), epsfcn(0) {}
55 template<
typename T0,
typename T1,
typename T2>
56 NumericalDiff(
const T0& a0,
const T1& a1,
const T2& a2) : Functor(a0, a1, a2), epsfcn(0) {}
59 InputsAtCompileTime = Functor::InputsAtCompileTime,
60 ValuesAtCompileTime = Functor::ValuesAtCompileTime
66 int df(
const InputType& _x, JacobianType &jac)
const
73 const typename InputType::Index n = _x.size();
78 val1.resize(Functor::values());
79 val2.resize(Functor::values());
85 Functor::operator()(x, val1); nfev++;
95 for (
int j = 0; j < n; ++j) {
103 Functor::operator()(x, val2);
106 jac.col(j) = (val2-val1)/h;
110 Functor::operator()(x, val2); nfev++;
112 Functor::operator()(x, val1); nfev++;
114 jac.col(j) = (val2-val1)/(2*h);
Definition: NumericalDiff.h:39
int df(const InputType &_x, JacobianType &jac) const
Definition: NumericalDiff.h:66
Namespace containing all symbols from the Eigen library.
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_sqrt_op< typename Derived::Scalar >, const Derived > sqrt(const Eigen::ArrayBase< Derived > &x)