blob: cb360d84ca2f80a09ed06ea395c5698c3076b56f [file]
template<typename FunctorType, typename Scalar>
int ei_fdjac2(
const FunctorType &Functor,
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
Scalar epsfcn)
{
/* Local variables */
Scalar h, temp;
int iflag;
/* Function Body */
const Scalar epsmch = epsilon<Scalar>();
const int n = x.size();
const Scalar eps = ei_sqrt((std::max(epsfcn,epsmch)));
Matrix< Scalar, Dynamic, 1 > wa(fvec.size());
for (int j = 0; j < n; ++j) {
temp = x[j];
h = eps * ei_abs(temp);
if (h == 0.) {
h = eps;
}
x[j] = temp + h;
iflag = Functor(x, wa);
if (iflag < 0)
return iflag;
x[j] = temp;
fjac.col(j) = (wa-fvec)/h;
}
return iflag;
}