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

View File

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

View File

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

View File

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

View File

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