13 #ifndef EIGEN_NUMERICAL_DIFF_H 14 #define EIGEN_NUMERICAL_DIFF_H 17 #include "./InternalHeaderCheck.h" 21 enum NumericalDiffMode { Forward, Central };
34 template <
typename Functor_, NumericalDiffMode mode = Forward>
37 typedef Functor_ Functor;
38 typedef typename Functor::Scalar Scalar;
39 typedef typename Functor::InputType InputType;
40 typedef typename Functor::ValueType ValueType;
41 typedef typename Functor::JacobianType JacobianType;
43 NumericalDiff(Scalar _epsfcn = 0.) : Functor(), epsfcn(_epsfcn) {}
44 NumericalDiff(
const Functor& f, Scalar _epsfcn = 0.) : Functor(f), epsfcn(_epsfcn) {}
47 template <
typename T0>
49 template <
typename T0,
typename T1>
50 NumericalDiff(
const T0& a0,
const T1& a1) : Functor(a0, a1), epsfcn(0) {}
51 template <
typename T0,
typename T1,
typename T2>
52 NumericalDiff(
const T0& a0,
const T1& a1,
const T2& a2) : Functor(a0, a1, a2), epsfcn(0) {}
54 enum { InputsAtCompileTime = Functor::InputsAtCompileTime, ValuesAtCompileTime = Functor::ValuesAtCompileTime };
59 int df(
const InputType& _x, JacobianType& jac)
const {
65 const typename InputType::Index n = _x.size();
70 val1.resize(Functor::values());
71 val2.resize(Functor::values());
77 Functor::operator()(x, val1);
88 for (
int j = 0; j < n; ++j) {
96 Functor::operator()(x, val2);
99 jac.col(j) = (val2 - val1) / h;
103 Functor::operator()(x, val2);
106 Functor::operator()(x, val1);
109 jac.col(j) = (val2 - val1) / (2 * h);
127 #endif // EIGEN_NUMERICAL_DIFF_H const Eigen::CwiseUnaryOp< Eigen::internal::scalar_sqrt_op< typename Derived::Scalar >, const Derived > sqrt(const Eigen::ArrayBase< Derived > &x)
Namespace containing all symbols from the Eigen library.
int df(const InputType &_x, JacobianType &jac) const
Definition: NumericalDiff.h:59
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_abs_op< typename Derived::Scalar >, const Derived > abs(const Eigen::ArrayBase< Derived > &x)
Definition: NumericalDiff.h:35