68 NumericalDiff(
const T0& a0,
const T1& a1,
const T2& a2) : Functor(a0, a1, a2), epsfcn(0) {}
79 int df(
const InputType& _x, JacobianType& jac)
const {
85 const typename InputType::Index n = _x.size();
90 val1.resize(Functor::values());
91 val2.resize(Functor::values());
97 Functor::operator()(x, val1);
108 for (
int j = 0; j < n; ++j) {
109 const Scalar x_abs = abs(x[j]);
110 h = numext::maxi(x_abs, Scalar(1)) * eps;
114 Scalar x_plus = _x[j] + h;
115 internal::numerical_diff_barrier(x_plus);
120 Functor::operator()(x, val2);
123 jac.col(j) = (val2 - val1) / h;
127 Functor::operator()(x, val2);
131 Scalar x_minus = _x[j] - h;
132 internal::numerical_diff_barrier(x_minus);
134 Functor::operator()(x, val1);
137 jac.col(j) = (val2 - val1) / (x_plus - x_minus);