mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
playing with functors
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
|
||||
template<typename Functor, typename Scalar>
|
||||
template<typename FunctorType, typename Scalar>
|
||||
int ei_lmder(
|
||||
const FunctorType &Functor,
|
||||
Matrix< Scalar, Dynamic, 1 > &x,
|
||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
||||
int &nfev,
|
||||
@@ -56,7 +57,7 @@ int ei_lmder(
|
||||
/* evaluate the function at the starting point */
|
||||
/* and calculate its norm. */
|
||||
|
||||
iflag = Functor::f(x, fvec);
|
||||
iflag = Functor.f(x, fvec);
|
||||
nfev = 1;
|
||||
if (iflag < 0)
|
||||
goto algo_end;
|
||||
@@ -73,17 +74,17 @@ int ei_lmder(
|
||||
|
||||
/* calculate the jacobian matrix. */
|
||||
|
||||
iflag = Functor::df(x, fjac);
|
||||
iflag = Functor.df(x, fjac);
|
||||
++njev;
|
||||
if (iflag < 0)
|
||||
break;
|
||||
|
||||
/* if requested, call Functor::f to enable printing of iterates. */
|
||||
/* if requested, call Functor.f to enable printing of iterates. */
|
||||
|
||||
if (nprint > 0) {
|
||||
iflag = 0;
|
||||
if ((iter - 1) % nprint == 0)
|
||||
iflag = Functor::debug(x, fvec, fjac);
|
||||
iflag = Functor.debug(x, fvec, fjac);
|
||||
if (iflag < 0)
|
||||
break;
|
||||
}
|
||||
@@ -179,7 +180,7 @@ int ei_lmder(
|
||||
|
||||
/* evaluate the function at x + p and calculate its norm. */
|
||||
|
||||
iflag = Functor::f(wa2, wa4);
|
||||
iflag = Functor.f(wa2, wa4);
|
||||
++nfev;
|
||||
if (iflag < 0)
|
||||
goto algo_end;
|
||||
@@ -276,7 +277,7 @@ algo_end:
|
||||
if (iflag < 0)
|
||||
info = iflag;
|
||||
if (nprint > 0)
|
||||
iflag = Functor::debug(x, fvec, fjac);
|
||||
iflag = Functor.debug(x, fvec, fjac);
|
||||
return info;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
|
||||
template<typename Functor, typename Scalar>
|
||||
template<typename FunctorType, typename Scalar>
|
||||
int ei_lmder1(
|
||||
const FunctorType &Functor,
|
||||
Matrix< Scalar, Dynamic, 1 > &x,
|
||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
||||
VectorXi &ipvt,
|
||||
Scalar tol = ei_sqrt(epsilon<Scalar>())
|
||||
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
||||
)
|
||||
{
|
||||
const int n = x.size(), m=fvec.size();
|
||||
@@ -19,7 +20,8 @@ int ei_lmder1(
|
||||
}
|
||||
|
||||
ipvt.resize(n);
|
||||
info = ei_lmder<Functor,Scalar>(
|
||||
info = ei_lmder(
|
||||
Functor,
|
||||
x, fvec,
|
||||
nfev, njev,
|
||||
fjac, ipvt, qtf, diag,
|
||||
|
||||
Reference in New Issue
Block a user