1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
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,
Matrix< Scalar, Dynamic, 1 > &wa)
{
/* 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)));
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.f(x, wa);
if (iflag < 0)
return iflag;
x[j] = temp;
fjac.col(j) = (wa-fvec)/h;
}
return iflag;
}
|