From 6c1a9703b1c5f4cc64dbfc5f0396389e39d82183 Mon Sep 17 00:00:00 2001 From: Thomas Capricelli Date: Tue, 25 Aug 2009 16:08:09 +0200 Subject: move most of results vectors/matrices inside respective classes. --- unsupported/Eigen/src/NonLinear/hybrd.h | 25 ++++++++----------------- unsupported/Eigen/src/NonLinear/hybrj.h | 24 ++++++++---------------- unsupported/Eigen/src/NonLinear/lmder.h | 27 ++++++++++++--------------- unsupported/Eigen/src/NonLinear/lmdif.h | 25 +++++++++++-------------- unsupported/Eigen/src/NonLinear/lmstr.h | 25 +++++++++++-------------- 5 files changed, 50 insertions(+), 76 deletions(-) (limited to 'unsupported/Eigen/src/NonLinear') 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()) ); 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 int HybridNonLinearSolverNumericalDiff::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::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::solve( template int HybridNonLinearSolverNumericalDiff::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::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()) ); 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 int HybridNonLinearSolver::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::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::solve( template int HybridNonLinearSolver::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::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()) ); 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 int LevenbergMarquardt::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::minimize( } info = minimize( - x, fvec, + x, nfev, njev, - fjac, ipvt, qtf, diag, + diag, 1, 100., (n+1)*100, @@ -70,12 +69,8 @@ int LevenbergMarquardt::minimize( template int LevenbergMarquardt::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::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()) ); 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 int LevenbergMarquardtNumericalDiff::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::minimize( } info = minimize( - x, fvec, + x, nfev, - fjac, ipvt, qtf, diag, + diag, 1, 100., (n+1)*200, @@ -69,11 +68,7 @@ int LevenbergMarquardtNumericalDiff::minimize( template int LevenbergMarquardtNumericalDiff::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::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()) ); 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 int LevenbergMarquardtOptimumStorage::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::minimize( } info = minimize( - x, fvec, + x, nfev, njev, - fjac, ipvt, qtf, diag, + diag, 1, 100., (n+1)*100, @@ -69,12 +68,8 @@ int LevenbergMarquardtOptimumStorage::minimize( template int LevenbergMarquardtOptimumStorage::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::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); -- cgit v1.2.3