diff options
Diffstat (limited to 'unsupported/Eigen/src/NonLinearOptimization/chkder.h')
-rw-r--r-- | unsupported/Eigen/src/NonLinearOptimization/chkder.h | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/unsupported/Eigen/src/NonLinearOptimization/chkder.h b/unsupported/Eigen/src/NonLinearOptimization/chkder.h index 4cb4fbdef..e2bdf923c 100644 --- a/unsupported/Eigen/src/NonLinearOptimization/chkder.h +++ b/unsupported/Eigen/src/NonLinearOptimization/chkder.h @@ -2,8 +2,10 @@ #define chkder_log10e 0.43429448190325182765 #define chkder_factor 100. +namespace internal { + template<typename Scalar> -void ei_chkder( +void chkder( const Matrix< Scalar, Dynamic, 1 > &x, const Matrix< Scalar, Dynamic, 1 > &fvec, const Matrix< Scalar, Dynamic, Dynamic > &fjac, @@ -15,9 +17,9 @@ void ei_chkder( { typedef DenseIndex Index; - const Scalar eps = ei_sqrt(NumTraits<Scalar>::epsilon()); + const Scalar eps = sqrt(NumTraits<Scalar>::epsilon()); const Scalar epsf = chkder_factor * NumTraits<Scalar>::epsilon(); - const Scalar epslog = chkder_log10e * ei_log(eps); + const Scalar epslog = chkder_log10e * log(eps); Scalar temp; const Index m = fvec.size(), n = x.size(); @@ -26,7 +28,7 @@ void ei_chkder( /* mode = 1. */ xp.resize(n); for (Index j = 0; j < n; ++j) { - temp = eps * ei_abs(x[j]); + temp = eps * abs(x[j]); if (temp == 0.) temp = eps; xp[j] = x[j] + temp; @@ -36,21 +38,22 @@ void ei_chkder( /* mode = 2. */ err.setZero(m); for (Index j = 0; j < n; ++j) { - temp = ei_abs(x[j]); + temp = abs(x[j]); if (temp == 0.) temp = 1.; err += temp * fjac.col(j); } for (Index i = 0; i < m; ++i) { temp = 1.; - if (fvec[i] != 0. && fvecp[i] != 0. && ei_abs(fvecp[i] - fvec[i]) >= epsf * ei_abs(fvec[i])) - temp = eps * ei_abs((fvecp[i] - fvec[i]) / eps - err[i]) / (ei_abs(fvec[i]) + ei_abs(fvecp[i])); + if (fvec[i] != 0. && fvecp[i] != 0. && abs(fvecp[i] - fvec[i]) >= epsf * abs(fvec[i])) + temp = eps * abs((fvecp[i] - fvec[i]) / eps - err[i]) / (abs(fvec[i]) + abs(fvecp[i])); err[i] = 1.; if (temp > NumTraits<Scalar>::epsilon() && temp < eps) - err[i] = (chkder_log10e * ei_log(temp) - epslog) / epslog; + err[i] = (chkder_log10e * log(temp) - epslog) / epslog; if (temp >= eps) err[i] = 0.; } } } +} // end namespace internal
\ No newline at end of file |