This commit is contained in:
Thomas Capricelli 2009-08-25 14:28:19 +02:00
parent 201f58e528
commit 38fc6c8553
5 changed files with 83 additions and 83 deletions

View File

@ -10,7 +10,7 @@ public:
Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec, Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac, Matrix< Scalar, Dynamic, Dynamic > &fjac,
Scalar tol = ei_sqrt(epsilon<Scalar>()) const Scalar tol = ei_sqrt(epsilon<Scalar>())
); );
int solve( int solve(
Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &x,
@ -20,14 +20,14 @@ public:
Matrix< Scalar, Dynamic, 1 > &R, Matrix< Scalar, Dynamic, 1 > &R,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode=1, const int mode=1,
int nb_of_subdiagonals = -1, int nb_of_subdiagonals = -1,
int nb_of_superdiagonals = -1, int nb_of_superdiagonals = -1,
int maxfev = 2000, const int maxfev = 2000,
Scalar factor = Scalar(100.), const Scalar factor = Scalar(100.),
Scalar xtol = ei_sqrt(epsilon<Scalar>()), const Scalar xtol = ei_sqrt(epsilon<Scalar>()),
Scalar epsfcn = Scalar(0.), const Scalar epsfcn = Scalar(0.),
int nprint=0 const int nprint=0
); );
private: private:
@ -41,7 +41,7 @@ int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec, Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac, Matrix< Scalar, Dynamic, Dynamic > &fjac,
Scalar tol const Scalar tol
) )
{ {
const int n = x.size(); const int n = x.size();
@ -79,14 +79,14 @@ int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
Matrix< Scalar, Dynamic, 1 > &R, Matrix< Scalar, Dynamic, 1 > &R,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode, const int mode,
int nb_of_subdiagonals, int nb_of_subdiagonals,
int nb_of_superdiagonals, int nb_of_superdiagonals,
int maxfev, const int maxfev,
Scalar factor, const Scalar factor,
Scalar xtol, const Scalar xtol,
Scalar epsfcn, const Scalar epsfcn,
int nprint const int nprint
) )
{ {
const int n = x.size(); const int n = x.size();

View File

@ -10,7 +10,7 @@ public:
Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec, Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac, Matrix< Scalar, Dynamic, Dynamic > &fjac,
Scalar tol = ei_sqrt(epsilon<Scalar>()) const Scalar tol = ei_sqrt(epsilon<Scalar>())
); );
int solve( int solve(
Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &x,
@ -20,11 +20,11 @@ public:
Matrix< Scalar, Dynamic, 1 > &R, Matrix< Scalar, Dynamic, 1 > &R,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode=1, const int mode=1,
int maxfev = 1000, const int maxfev = 1000,
Scalar factor = Scalar(100.), const Scalar factor = Scalar(100.),
Scalar xtol = ei_sqrt(epsilon<Scalar>()), const Scalar xtol = ei_sqrt(epsilon<Scalar>()),
int nprint=0 const int nprint=0
); );
private: private:
@ -38,7 +38,7 @@ int HybridNonLinearSolver<FunctorType,Scalar>::solve(
Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec, Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac, Matrix< Scalar, Dynamic, Dynamic > &fjac,
Scalar tol const Scalar tol
) )
{ {
const int n = x.size(); const int n = x.size();
@ -77,11 +77,11 @@ int HybridNonLinearSolver<FunctorType,Scalar>::solve(
Matrix< Scalar, Dynamic, 1 > &R, Matrix< Scalar, Dynamic, 1 > &R,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode, const int mode,
int maxfev, const int maxfev,
Scalar factor, const Scalar factor,
Scalar xtol, const Scalar xtol,
int nprint const int nprint
) )
{ {
const int n = x.size(); const int n = x.size();

View File

@ -21,13 +21,13 @@ public:
VectorXi &ipvt, VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode=1, const int mode=1,
Scalar factor = 100., const Scalar factor = 100.,
int maxfev = 400, const int maxfev = 400,
Scalar ftol = ei_sqrt(epsilon<Scalar>()), const Scalar ftol = ei_sqrt(epsilon<Scalar>()),
Scalar xtol = ei_sqrt(epsilon<Scalar>()), const Scalar xtol = ei_sqrt(epsilon<Scalar>()),
Scalar gtol = Scalar(0.), const Scalar gtol = Scalar(0.),
int nprint=0 const int nprint=0
); );
private: private:
@ -46,7 +46,7 @@ int LevenbergMarquardt<FunctorType,Scalar>::minimize(
int info, nfev=0, njev=0; int info, nfev=0, njev=0;
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n); Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
Matrix< Scalar, Dynamic, 1> diag, qtf; Matrix< Scalar, Dynamic, 1> diag, qtf;
VectorXi ipvt(n); VectorXi ipvt;
/* check the input parameters for errors. */ /* check the input parameters for errors. */
if (n <= 0 || m < n || tol < 0.) { if (n <= 0 || m < n || tol < 0.) {
@ -55,14 +55,14 @@ int LevenbergMarquardt<FunctorType,Scalar>::minimize(
} }
info = minimize( info = minimize(
x, fvec, x, fvec,
nfev, njev, nfev, njev,
fjac, ipvt, qtf, diag, fjac, ipvt, qtf, diag,
1, 1,
100., 100.,
(n+1)*100, (n+1)*100,
tol, tol, Scalar(0.) tol, tol, Scalar(0.)
); );
return (info==8)?4:info; return (info==8)?4:info;
} }
@ -77,13 +77,13 @@ int LevenbergMarquardt<FunctorType,Scalar>::minimize(
VectorXi &ipvt, VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode, const int mode,
Scalar factor, const Scalar factor,
int maxfev, const int maxfev,
Scalar ftol, const Scalar ftol,
Scalar xtol, const Scalar xtol,
Scalar gtol, const Scalar gtol,
int nprint const int nprint
) )
{ {
const int m = fvec.size(), n = x.size(); const int m = fvec.size(), n = x.size();

View File

@ -1,5 +1,4 @@
template<typename FunctorType, typename Scalar> template<typename FunctorType, typename Scalar>
class LevenbergMarquardtNumericalDiff class LevenbergMarquardtNumericalDiff
{ {
@ -21,14 +20,14 @@ public:
VectorXi &ipvt, VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode=1, const int mode=1,
Scalar factor = 100., const Scalar factor = 100.,
int maxfev = 400, const int maxfev = 400,
Scalar ftol = ei_sqrt(epsilon<Scalar>()), const Scalar ftol = ei_sqrt(epsilon<Scalar>()),
Scalar xtol = ei_sqrt(epsilon<Scalar>()), const Scalar xtol = ei_sqrt(epsilon<Scalar>()),
Scalar gtol = Scalar(0.), const Scalar gtol = Scalar(0.),
Scalar epsfcn = Scalar(0.), const Scalar epsfcn = Scalar(0.),
int nprint=0 const int nprint=0
); );
private: private:
@ -40,7 +39,7 @@ template<typename FunctorType, typename Scalar>
int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize( int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec, Matrix< Scalar, Dynamic, 1 > &fvec,
Scalar tol const Scalar tol
) )
{ {
const int n = x.size(), m=fvec.size(); const int n = x.size(), m=fvec.size();
@ -76,14 +75,14 @@ int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
VectorXi &ipvt, VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode, const int mode,
Scalar factor, const Scalar factor,
int maxfev, const int maxfev,
Scalar ftol, const Scalar ftol,
Scalar xtol, const Scalar xtol,
Scalar gtol, const Scalar gtol,
Scalar epsfcn, const Scalar epsfcn,
int nprint const int nprint
) )
{ {
const int m = fvec.size(), n = x.size(); const int m = fvec.size(), n = x.size();

View File

@ -21,13 +21,13 @@ public:
VectorXi &ipvt, VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode=1, const int mode=1,
Scalar factor = 100., const Scalar factor = 100.,
int maxfev = 400, const int maxfev = 400,
Scalar ftol = ei_sqrt(epsilon<Scalar>()), const Scalar ftol = ei_sqrt(epsilon<Scalar>()),
Scalar xtol = ei_sqrt(epsilon<Scalar>()), const Scalar xtol = ei_sqrt(epsilon<Scalar>()),
Scalar gtol = Scalar(0.), const Scalar gtol = Scalar(0.),
int nprint=0 const int nprint=0
); );
private: private:
@ -39,14 +39,14 @@ template<typename FunctorType, typename Scalar>
int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize( int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
Matrix< Scalar, Dynamic, 1 > &x, Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec, Matrix< Scalar, Dynamic, 1 > &fvec,
Scalar tol const Scalar tol
) )
{ {
const int n = x.size(), m=fvec.size(); const int n = x.size(), m=fvec.size();
int info, nfev=0, njev=0; int info, nfev=0, njev=0;
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n); Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
Matrix< Scalar, Dynamic, 1> diag, qtf; Matrix< Scalar, Dynamic, 1> diag, qtf;
VectorXi ipvt(n); VectorXi ipvt;
/* check the input parameters for errors. */ /* check the input parameters for errors. */
if (n <= 0 || m < n || tol < 0.) { if (n <= 0 || m < n || tol < 0.) {
@ -76,13 +76,13 @@ int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
VectorXi &ipvt, VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf, Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag, Matrix< Scalar, Dynamic, 1 > &diag,
int mode, const int mode,
Scalar factor, const Scalar factor,
int maxfev, const int maxfev,
Scalar ftol, const Scalar ftol,
Scalar xtol, const Scalar xtol,
Scalar gtol, const Scalar gtol,
int nprint const int nprint
) )
{ {
const int m = fvec.size(), n = x.size(); const int m = fvec.size(), n = x.size();
@ -115,6 +115,7 @@ int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
if (n <= 0 || m < n || ftol < 0. || xtol < 0. || gtol < 0. || maxfev <= 0 || factor <= 0.) if (n <= 0 || m < n || ftol < 0. || xtol < 0. || gtol < 0. || maxfev <= 0 || factor <= 0.)
goto algo_end; goto algo_end;
if (mode == 2) if (mode == 2)
for (j = 0; j < n; ++j) for (j = 0; j < n; ++j)
if (diag[j] <= 0.) goto algo_end; if (diag[j] <= 0.) goto algo_end;