move most of results vectors/matrices inside respective classes.

This commit is contained in:
Thomas Capricelli 2009-08-25 16:08:09 +02:00
parent 38fc6c8553
commit 6c1a9703b1
6 changed files with 192 additions and 237 deletions

View File

@ -8,17 +8,11 @@ public:
int solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
const Scalar tol = ei_sqrt(epsilon<Scalar>())
);
int solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
Matrix< Scalar, Dynamic, 1 > &R,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode=1,
int nb_of_subdiagonals = -1,
@ -30,6 +24,10 @@ public:
const int nprint=0
);
Matrix< Scalar, Dynamic, 1 > fvec;
Matrix< Scalar, Dynamic, Dynamic > fjac;
Matrix< Scalar, Dynamic, 1 > R;
Matrix< Scalar, Dynamic, 1 > qtf;
private:
const FunctorType &functor;
};
@ -39,14 +37,12 @@ private:
template<typename FunctorType, typename Scalar>
int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
const Scalar tol
)
{
const int n = x.size();
int info, nfev=0;
Matrix< Scalar, Dynamic, 1> R, qtf, diag;
Matrix< Scalar, Dynamic, 1> diag;
/* check the input parameters for errors. */
if (n <= 0 || tol < 0.) {
@ -56,10 +52,9 @@ int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
diag.setConstant(n, 1.);
info = solve(
x, fvec,
x,
nfev,
fjac,
R, qtf, diag,
diag,
2,
-1, -1,
(n+1)*200,
@ -73,11 +68,7 @@ int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
template<typename FunctorType, typename Scalar>
int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
Matrix< Scalar, Dynamic, 1 > &R,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode,
int nb_of_subdiagonals,
@ -95,10 +86,10 @@ int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
if (nb_of_subdiagonals<0) nb_of_subdiagonals = n-1;
if (nb_of_superdiagonals<0) nb_of_superdiagonals = n-1;
fvec.resize(n);
qtf.resize(n);
R.resize( (n*(n+1))/2);
fjac.resize(n, n);
fvec.resize(n);
/* Local variables */
int i, j, l, iwa[1];

View File

@ -8,17 +8,11 @@ public:
int solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
const Scalar tol = ei_sqrt(epsilon<Scalar>())
);
int solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev, int &njev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
Matrix< Scalar, Dynamic, 1 > &R,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode=1,
const int maxfev = 1000,
@ -27,6 +21,10 @@ public:
const int nprint=0
);
Matrix< Scalar, Dynamic, 1 > fvec;
Matrix< Scalar, Dynamic, Dynamic > fjac;
Matrix< Scalar, Dynamic, 1 > R;
Matrix< Scalar, Dynamic, 1 > qtf;
private:
const FunctorType &functor;
};
@ -36,14 +34,12 @@ private:
template<typename FunctorType, typename Scalar>
int HybridNonLinearSolver<FunctorType,Scalar>::solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
const Scalar tol
)
{
const int n = x.size();
int info, nfev=0, njev=0;
Matrix< Scalar, Dynamic, 1> R, qtf, diag;
Matrix< Scalar, Dynamic, 1> diag;
/* check the input parameters for errors. */
if (n <= 0 || tol < 0.) {
@ -53,10 +49,9 @@ int HybridNonLinearSolver<FunctorType,Scalar>::solve(
diag.setConstant(n, 1.);
info = solve(
x, fvec,
x,
nfev, njev,
fjac,
R, qtf, diag,
diag,
2,
(n+1)*100,
100.,
@ -70,12 +65,8 @@ int HybridNonLinearSolver<FunctorType,Scalar>::solve(
template<typename FunctorType, typename Scalar>
int HybridNonLinearSolver<FunctorType,Scalar>::solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev,
int &njev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
Matrix< Scalar, Dynamic, 1 > &R,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode,
const int maxfev,
@ -91,6 +82,7 @@ int HybridNonLinearSolver<FunctorType,Scalar>::solve(
qtf.resize(n);
R.resize( (n*(n+1))/2);
fjac.resize(n, n);
fvec.resize(n);
/* Local variables */
int i, j, l, iwa[1];

View File

@ -8,18 +8,13 @@ public:
int minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
const Scalar tol = ei_sqrt(epsilon<Scalar>())
);
int minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev,
int &njev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode=1,
const Scalar factor = 100.,
@ -30,6 +25,10 @@ public:
const int nprint=0
);
Matrix< Scalar, Dynamic, 1 > fvec;
Matrix< Scalar, Dynamic, Dynamic > fjac;
VectorXi ipvt;
Matrix< Scalar, Dynamic, 1 > qtf;
private:
const FunctorType &functor;
};
@ -38,11 +37,11 @@ private:
template<typename FunctorType, typename Scalar>
int LevenbergMarquardt<FunctorType,Scalar>::minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
const Scalar tol
)
{
const int n = x.size(), m=fvec.size();
const int n = x.size();
const int m = functor.nbOfFunctions();
int info, nfev=0, njev=0;
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
Matrix< Scalar, Dynamic, 1> diag, qtf;
@ -55,9 +54,9 @@ int LevenbergMarquardt<FunctorType,Scalar>::minimize(
}
info = minimize(
x, fvec,
x,
nfev, njev,
fjac, ipvt, qtf, diag,
diag,
1,
100.,
(n+1)*100,
@ -70,12 +69,8 @@ int LevenbergMarquardt<FunctorType,Scalar>::minimize(
template<typename FunctorType, typename Scalar>
int LevenbergMarquardt<FunctorType,Scalar>::minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev,
int &njev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode,
const Scalar factor,
@ -86,9 +81,11 @@ int LevenbergMarquardt<FunctorType,Scalar>::minimize(
const int nprint
)
{
const int m = fvec.size(), n = x.size();
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4(m);
const int n = x.size();
const int m = functor.nbOfFunctions();
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4;
fvec.resize(m);
ipvt.resize(n);
fjac.resize(m, n);
diag.resize(n);

View File

@ -8,17 +8,12 @@ public:
int minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
const Scalar tol = ei_sqrt(epsilon<Scalar>())
);
int minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode=1,
const Scalar factor = 100.,
@ -30,6 +25,10 @@ public:
const int nprint=0
);
Matrix< Scalar, Dynamic, 1 > fvec;
Matrix< Scalar, Dynamic, Dynamic > fjac;
VectorXi ipvt;
Matrix< Scalar, Dynamic, 1 > qtf;
private:
const FunctorType &functor;
};
@ -38,11 +37,11 @@ private:
template<typename FunctorType, typename Scalar>
int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
const Scalar tol
)
{
const int n = x.size(), m=fvec.size();
const int n = x.size();
const int m = functor.nbOfFunctions();
int info, nfev=0;
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
Matrix< Scalar, Dynamic, 1> diag, qtf;
@ -55,9 +54,9 @@ int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
}
info = minimize(
x, fvec,
x,
nfev,
fjac, ipvt, qtf, diag,
diag,
1,
100.,
(n+1)*200,
@ -69,11 +68,7 @@ int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
template<typename FunctorType, typename Scalar>
int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode,
const Scalar factor,
@ -85,9 +80,11 @@ int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
const int nprint
)
{
const int m = fvec.size(), n = x.size();
const int n = x.size();
const int m = functor.nbOfFunctions();
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4(m);
fvec.resize(m);
ipvt.resize(n);
fjac.resize(m, n);
diag.resize(n);

View File

@ -8,18 +8,13 @@ public:
int minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
const Scalar tol = ei_sqrt(epsilon<Scalar>())
);
int minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev,
int &njev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode=1,
const Scalar factor = 100.,
@ -30,6 +25,10 @@ public:
const int nprint=0
);
Matrix< Scalar, Dynamic, 1 > fvec;
Matrix< Scalar, Dynamic, Dynamic > fjac;
VectorXi ipvt;
Matrix< Scalar, Dynamic, 1 > qtf;
private:
const FunctorType &functor;
};
@ -38,11 +37,11 @@ private:
template<typename FunctorType, typename Scalar>
int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
const Scalar tol
)
{
const int n = x.size(), m=fvec.size();
const int n = x.size();
const int m = functor.nbOfFunctions();
int info, nfev=0, njev=0;
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
Matrix< Scalar, Dynamic, 1> diag, qtf;
@ -55,9 +54,9 @@ int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
}
info = minimize(
x, fvec,
x,
nfev, njev,
fjac, ipvt, qtf, diag,
diag,
1,
100.,
(n+1)*100,
@ -69,12 +68,8 @@ int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
template<typename FunctorType, typename Scalar>
int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
int &nfev,
int &njev,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
VectorXi &ipvt,
Matrix< Scalar, Dynamic, 1 > &qtf,
Matrix< Scalar, Dynamic, 1 > &diag,
const int mode,
const Scalar factor,
@ -85,9 +80,11 @@ int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
const int nprint
)
{
const int m = fvec.size(), n = x.size();
const int n = x.size();
const int m = functor.nbOfFunctions();
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4(m);
fvec.resize(m);
ipvt.resize(n);
fjac.resize(m, n);
diag.resize(n);

File diff suppressed because it is too large Load Diff