aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/Eigen/src/NonLinear
diff options
context:
space:
mode:
authorGravatar Thomas Capricelli <orzel@freehackers.org>2009-08-25 16:08:09 +0200
committerGravatar Thomas Capricelli <orzel@freehackers.org>2009-08-25 16:08:09 +0200
commit6c1a9703b1c5f4cc64dbfc5f0396389e39d82183 (patch)
tree54534004af2e03ca47b18ec773a7ba465a113f15 /unsupported/Eigen/src/NonLinear
parent38fc6c8553ff0b145e261d8e368a9020fb0e3078 (diff)
move most of results vectors/matrices inside respective classes.
Diffstat (limited to 'unsupported/Eigen/src/NonLinear')
-rw-r--r--unsupported/Eigen/src/NonLinear/hybrd.h25
-rw-r--r--unsupported/Eigen/src/NonLinear/hybrj.h24
-rw-r--r--unsupported/Eigen/src/NonLinear/lmder.h27
-rw-r--r--unsupported/Eigen/src/NonLinear/lmdif.h25
-rw-r--r--unsupported/Eigen/src/NonLinear/lmstr.h25
5 files changed, 50 insertions, 76 deletions
diff --git a/unsupported/Eigen/src/NonLinear/hybrd.h b/unsupported/Eigen/src/NonLinear/hybrd.h
index cb3cb5af0..4a2737ba0 100644
--- a/unsupported/Eigen/src/NonLinear/hybrd.h
+++ b/unsupported/Eigen/src/NonLinear/hybrd.h
@@ -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];
diff --git a/unsupported/Eigen/src/NonLinear/hybrj.h b/unsupported/Eigen/src/NonLinear/hybrj.h
index 4f67fd646..b4f72e7cc 100644
--- a/unsupported/Eigen/src/NonLinear/hybrj.h
+++ b/unsupported/Eigen/src/NonLinear/hybrj.h
@@ -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];
diff --git a/unsupported/Eigen/src/NonLinear/lmder.h b/unsupported/Eigen/src/NonLinear/lmder.h
index 5c1000957..2b3286e8e 100644
--- a/unsupported/Eigen/src/NonLinear/lmder.h
+++ b/unsupported/Eigen/src/NonLinear/lmder.h
@@ -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);
diff --git a/unsupported/Eigen/src/NonLinear/lmdif.h b/unsupported/Eigen/src/NonLinear/lmdif.h
index 701fd5f75..afe2d4e4b 100644
--- a/unsupported/Eigen/src/NonLinear/lmdif.h
+++ b/unsupported/Eigen/src/NonLinear/lmdif.h
@@ -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);
diff --git a/unsupported/Eigen/src/NonLinear/lmstr.h b/unsupported/Eigen/src/NonLinear/lmstr.h
index ecc16ad0e..6db4c220d 100644
--- a/unsupported/Eigen/src/NonLinear/lmstr.h
+++ b/unsupported/Eigen/src/NonLinear/lmstr.h
@@ -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);