Remove LM::sqrt_() member function in favor of a shortcut for sqrt(epsilon())

This commit is contained in:
Gael Guennebaud 2014-09-02 17:29:06 +02:00
parent ff9bfc45f7
commit 280661e67d

View File

@ -45,18 +45,24 @@ namespace LevenbergMarquardtSpace {
template<typename FunctorType, typename Scalar=double> template<typename FunctorType, typename Scalar=double>
class LevenbergMarquardt class LevenbergMarquardt
{ {
static Scalar sqrt_epsilon()
{
using std::sqrt;
return sqrt(NumTraits<Scalar>::epsilon());
}
public: public:
LevenbergMarquardt(FunctorType &_functor) LevenbergMarquardt(FunctorType &_functor)
: functor(_functor) { nfev = njev = iter = 0; fnorm = gnorm = 0.; useExternalScaling=false; } : functor(_functor) { nfev = njev = iter = 0; fnorm = gnorm = 0.; useExternalScaling=false; }
typedef DenseIndex Index; typedef DenseIndex Index;
struct Parameters { struct Parameters {
Parameters() Parameters()
: factor(Scalar(100.)) : factor(Scalar(100.))
, maxfev(400) , maxfev(400)
, ftol(sqrt_(NumTraits<Scalar>::epsilon())) , ftol(sqrt_epsilon())
, xtol(sqrt_(NumTraits<Scalar>::epsilon())) , xtol(sqrt_epsilon())
, gtol(Scalar(0.)) , gtol(Scalar(0.))
, epsfcn(Scalar(0.)) {} , epsfcn(Scalar(0.)) {}
Scalar factor; Scalar factor;
@ -72,7 +78,7 @@ public:
LevenbergMarquardtSpace::Status lmder1( LevenbergMarquardtSpace::Status lmder1(
FVectorType &x, FVectorType &x,
const Scalar tol = sqrt_(NumTraits<Scalar>::epsilon()) const Scalar tol = sqrt_epsilon()
); );
LevenbergMarquardtSpace::Status minimize(FVectorType &x); LevenbergMarquardtSpace::Status minimize(FVectorType &x);
@ -83,12 +89,12 @@ public:
FunctorType &functor, FunctorType &functor,
FVectorType &x, FVectorType &x,
Index *nfev, Index *nfev,
const Scalar tol = sqrt_(NumTraits<Scalar>::epsilon()) const Scalar tol = sqrt_epsilon()
); );
LevenbergMarquardtSpace::Status lmstr1( LevenbergMarquardtSpace::Status lmstr1(
FVectorType &x, FVectorType &x,
const Scalar tol = sqrt_(NumTraits<Scalar>::epsilon()) const Scalar tol = sqrt_epsilon()
); );
LevenbergMarquardtSpace::Status minimizeOptimumStorage(FVectorType &x); LevenbergMarquardtSpace::Status minimizeOptimumStorage(FVectorType &x);
@ -109,7 +115,6 @@ public:
Scalar lm_param(void) { return par; } Scalar lm_param(void) { return par; }
private: private:
static Scalar sqrt_(const Scalar& x) { using std::sqrt; return sqrt(x); }
FunctorType &functor; FunctorType &functor;
Index n; Index n;