From 458947af5e6a6712b313e205eba73e2978d05e0f Mon Sep 17 00:00:00 2001 From: Thomas Capricelli Date: Wed, 26 Aug 2009 14:23:05 +0200 Subject: [PATCH] move Parameters as a class member, simplify calling sequence. Convenience methods from minpack ( "*1()" ) get their original name back : they are only useful when porting, anyway. Still, i prefer to keep them. --- .../src/NonLinear/HybridNonLinearSolver.h | 54 +++---- .../Eigen/src/NonLinear/LevenbergMarquardt.h | 65 +++----- unsupported/test/NonLinear.cpp | 153 ++++++++---------- 3 files changed, 106 insertions(+), 166 deletions(-) diff --git a/unsupported/Eigen/src/NonLinear/HybridNonLinearSolver.h b/unsupported/Eigen/src/NonLinear/HybridNonLinearSolver.h index 5e5204ed7..5c3eb9d28 100644 --- a/unsupported/Eigen/src/NonLinear/HybridNonLinearSolver.h +++ b/unsupported/Eigen/src/NonLinear/HybridNonLinearSolver.h @@ -33,48 +33,44 @@ public: Scalar epsfcn; }; - Status solve( + Status hybrj1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol = ei_sqrt(epsilon()) ); Status solveInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status solveOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status solve( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); - Status solveNumericalDiff( + Status hybrd1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol = ei_sqrt(epsilon()) ); Status solveNumericalDiffInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status solveNumericalDiffOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status solveNumericalDiff( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); + void resetParameters(void) { parameters = Parameters(); } + Parameters parameters; Matrix< Scalar, Dynamic, 1 > fvec; Matrix< Scalar, Dynamic, Dynamic > fjac; Matrix< Scalar, Dynamic, 1 > R; @@ -105,24 +101,23 @@ private: template typename HybridNonLinearSolver::Status -HybridNonLinearSolver::solve( +HybridNonLinearSolver::hybrj1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol ) { n = x.size(); - Parameters parameters; /* check the input parameters for errors. */ if (n <= 0 || tol < 0.) return ImproperInputParameters; + resetParameters(); parameters.maxfev = 100*(n+1); parameters.xtol = tol; diag.setConstant(n, 1.); return solve( x, - parameters, 2 ); } @@ -131,7 +126,6 @@ template typename HybridNonLinearSolver::Status HybridNonLinearSolver::solveInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { @@ -182,7 +176,6 @@ template typename HybridNonLinearSolver::Status HybridNonLinearSolver::solveOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { @@ -404,13 +397,12 @@ template typename HybridNonLinearSolver::Status HybridNonLinearSolver::solve( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { - Status status = solveInit(x, parameters, mode); + Status status = solveInit(x, mode); while (status==Running) - status = solveOneStep(x, parameters, mode); + status = solveOneStep(x, mode); return status; } @@ -418,25 +410,24 @@ HybridNonLinearSolver::solve( template typename HybridNonLinearSolver::Status -HybridNonLinearSolver::solveNumericalDiff( +HybridNonLinearSolver::hybrd1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol ) { n = x.size(); - Parameters parameters; /* check the input parameters for errors. */ if (n <= 0 || tol < 0.) return ImproperInputParameters; + resetParameters(); parameters.maxfev = 200*(n+1); parameters.xtol = tol; diag.setConstant(n, 1.); return solveNumericalDiff( x, - parameters, 2 ); } @@ -445,16 +436,13 @@ template typename HybridNonLinearSolver::Status HybridNonLinearSolver::solveNumericalDiffInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { n = x.size(); - int nsub = parameters.nb_of_subdiagonals; - int nsup = parameters.nb_of_superdiagonals; - if (nsub<0) nsub= n-1; - if (nsup<0) nsup= n-1; + if (parameters.nb_of_subdiagonals<0) parameters.nb_of_subdiagonals= n-1; + if (parameters.nb_of_superdiagonals<0) parameters.nb_of_superdiagonals= n-1; wa1.resize(n); wa2.resize(n); wa3.resize(n); wa4.resize(n); qtf.resize(n); @@ -472,7 +460,7 @@ HybridNonLinearSolver::solveNumericalDiffInit( /* check the input parameters for errors. */ - if (n <= 0 || parameters.xtol < 0. || parameters.maxfev <= 0 || nsub< 0 || nsup< 0 || parameters.factor <= 0. ) + if (n <= 0 || parameters.xtol < 0. || parameters.maxfev <= 0 || parameters.nb_of_subdiagonals< 0 || parameters.nb_of_superdiagonals< 0 || parameters.factor <= 0. ) return ImproperInputParameters; if (mode == 2) for (int j = 0; j < n; ++j) @@ -502,22 +490,19 @@ template typename HybridNonLinearSolver::Status HybridNonLinearSolver::solveNumericalDiffOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { int i, j, l, iwa[1]; jeval = true; - int nsub = parameters.nb_of_subdiagonals; - int nsup = parameters.nb_of_superdiagonals; - if (nsub<0) nsub= n-1; - if (nsup<0) nsup= n-1; + if (parameters.nb_of_subdiagonals<0) parameters.nb_of_subdiagonals= n-1; + if (parameters.nb_of_superdiagonals<0) parameters.nb_of_superdiagonals= n-1; /* calculate the jacobian matrix. */ - if (ei_fdjac1(functor, x, fvec, fjac, nsub, nsup, parameters.epsfcn) <0) + if (ei_fdjac1(functor, x, fvec, fjac, parameters.nb_of_subdiagonals, parameters.nb_of_superdiagonals, parameters.epsfcn) <0) return UserAksed; - nfev += std::min(nsub+ nsup+ 1, n); + nfev += std::min(parameters.nb_of_subdiagonals+parameters.nb_of_superdiagonals+ 1, n); /* compute the qr factorization of the jacobian. */ @@ -728,13 +713,12 @@ template typename HybridNonLinearSolver::Status HybridNonLinearSolver::solveNumericalDiff( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { - Status status = solveNumericalDiffInit(x, parameters, mode); + Status status = solveNumericalDiffInit(x, mode); while (status==Running) - status = solveNumericalDiffOneStep(x, parameters, mode); + status = solveNumericalDiffOneStep(x, mode); return status; } diff --git a/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h b/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h index bb164bcba..dda169c97 100644 --- a/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h +++ b/unsupported/Eigen/src/NonLinear/LevenbergMarquardt.h @@ -36,69 +36,62 @@ public: Scalar epsfcn; }; - Status minimize( + Status lmder1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol = ei_sqrt(epsilon()) ); Status minimize( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status minimizeInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status minimizeOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); - Status minimizeNumericalDiff( + Status lmdif1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol = ei_sqrt(epsilon()) ); Status minimizeNumericalDiff( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status minimizeNumericalDiffInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status minimizeNumericalDiffOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); - Status minimizeOptimumStorage( + Status lmstr1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol = ei_sqrt(epsilon()) ); Status minimizeOptimumStorage( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status minimizeOptimumStorageInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); Status minimizeOptimumStorageOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode=1 ); + void resetParameters(void) { parameters = Parameters(); } + Parameters parameters; Matrix< Scalar, Dynamic, 1 > fvec; Matrix< Scalar, Dynamic, Dynamic > fjac; VectorXi ipvt; @@ -123,27 +116,24 @@ private: template typename LevenbergMarquardt::Status -LevenbergMarquardt::minimize( +LevenbergMarquardt::lmder1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol ) { n = x.size(); m = functor.nbOfFunctions(); - Parameters parameters; /* check the input parameters for errors. */ if (n <= 0 || m < n || tol < 0.) return ImproperInputParameters; + resetParameters(); parameters.ftol = tol; parameters.xtol = tol; parameters.maxfev = 100*(n+1); - return minimize( - x, - parameters - ); + return minimize(x); } @@ -151,13 +141,12 @@ template typename LevenbergMarquardt::Status LevenbergMarquardt::minimize( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { - Status status = minimizeInit(x, parameters, mode); + Status status = minimizeInit(x, mode); while (status==Running) - status = minimizeOneStep(x, parameters, mode); + status = minimizeOneStep(x, mode); return status; } @@ -165,7 +154,6 @@ template typename LevenbergMarquardt::Status LevenbergMarquardt::minimizeInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { @@ -216,7 +204,6 @@ template typename LevenbergMarquardt::Status LevenbergMarquardt::minimizeOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { @@ -408,34 +395,30 @@ LevenbergMarquardt::minimizeOneStep( template typename LevenbergMarquardt::Status -LevenbergMarquardt::minimizeNumericalDiff( +LevenbergMarquardt::lmdif1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol ) { n = x.size(); m = functor.nbOfFunctions(); - Parameters parameters; /* check the input parameters for errors. */ if (n <= 0 || m < n || tol < 0.) return ImproperInputParameters; + resetParameters(); parameters.ftol = tol; parameters.xtol = tol; parameters.maxfev = 200*(n+1); - return minimizeNumericalDiff( - x, - parameters - ); + return minimizeNumericalDiff(x); } template typename LevenbergMarquardt::Status LevenbergMarquardt::minimizeNumericalDiffInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { @@ -484,7 +467,6 @@ template typename LevenbergMarquardt::Status LevenbergMarquardt::minimizeNumericalDiffOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { @@ -679,20 +661,19 @@ template typename LevenbergMarquardt::Status LevenbergMarquardt::minimizeNumericalDiff( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { - Status status = minimizeNumericalDiffInit(x, parameters, mode); + Status status = minimizeNumericalDiffInit(x, mode); while (status==Running) - status = minimizeNumericalDiffOneStep(x, parameters, mode); + status = minimizeNumericalDiffOneStep(x, mode); return status; } template typename LevenbergMarquardt::Status -LevenbergMarquardt::minimizeOptimumStorage( +LevenbergMarquardt::lmstr1( Matrix< Scalar, Dynamic, 1 > &x, const Scalar tol ) @@ -701,27 +682,23 @@ LevenbergMarquardt::minimizeOptimumStorage( m = functor.nbOfFunctions(); Matrix< Scalar, Dynamic, Dynamic > fjac(m, n); VectorXi ipvt; - Parameters parameters; /* check the input parameters for errors. */ if (n <= 0 || m < n || tol < 0.) return ImproperInputParameters; + resetParameters(); parameters.ftol = tol; parameters.xtol = tol; parameters.maxfev = 100*(n+1); - return minimizeOptimumStorage( - x, - parameters - ); + return minimizeOptimumStorage(x); } template typename LevenbergMarquardt::Status LevenbergMarquardt::minimizeOptimumStorageInit( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { @@ -773,7 +750,6 @@ template typename LevenbergMarquardt::Status LevenbergMarquardt::minimizeOptimumStorageOneStep( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { @@ -986,13 +962,12 @@ template typename LevenbergMarquardt::Status LevenbergMarquardt::minimizeOptimumStorage( Matrix< Scalar, Dynamic, 1 > &x, - const Parameters ¶meters, const int mode ) { - Status status = minimizeOptimumStorageInit(x, parameters, mode); + Status status = minimizeOptimumStorageInit(x, mode); while (status==Running) - status = minimizeOptimumStorageOneStep(x, parameters, mode); + status = minimizeOptimumStorageOneStep(x, mode); return status; } diff --git a/unsupported/test/NonLinear.cpp b/unsupported/test/NonLinear.cpp index cb1675a36..8d97ef939 100644 --- a/unsupported/test/NonLinear.cpp +++ b/unsupported/test/NonLinear.cpp @@ -154,7 +154,7 @@ void testLmder1() // do the computation lmder_functor functor; LevenbergMarquardt lm(functor); - info = lm.minimize(x); + info = lm.lmder1(x); // check return value VERIFY( 1 == info); @@ -181,8 +181,7 @@ void testLmder() // do the computation lmder_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return values VERIFY( 1 == info); @@ -270,7 +269,7 @@ void testHybrj1() // do the computation hybrj_functor functor; HybridNonLinearSolver solver(functor); - info = solver.solve(x); + info = solver.hybrj1(x); // check return value VERIFY( 1 == info); @@ -302,8 +301,7 @@ void testHybrj() hybrj_functor functor; HybridNonLinearSolver solver(functor); solver.diag.setConstant(n, 1.); - HybridNonLinearSolver::Parameters parameters; - info = solver.solve(x, parameters, 2); + info = solver.solve(x, 2); // check return value VERIFY( 1 == info); @@ -356,7 +354,7 @@ void testHybrd1() // do the computation hybrd_functor functor; HybridNonLinearSolver solver(functor); - info = solver.solveNumericalDiff(x); + info = solver.hybrd1(x); // check return value VERIFY( 1 == info); @@ -382,11 +380,10 @@ void testHybrd() // do the computation hybrd_functor functor; HybridNonLinearSolver solver(functor); - HybridNonLinearSolver::Parameters parameters; - parameters.nb_of_subdiagonals = 1; - parameters.nb_of_superdiagonals = 1; + solver.parameters.nb_of_subdiagonals = 1; + solver.parameters.nb_of_superdiagonals = 1; solver.diag.setConstant(n, 1.); - info = solver.solveNumericalDiff(x, parameters, 2); + info = solver.solveNumericalDiff(x, 2); // check return value VERIFY( 1 == info); @@ -457,7 +454,7 @@ void testLmstr1() // do the computation lmstr_functor functor; LevenbergMarquardt lm(functor); - info = lm.minimizeOptimumStorage(x); + info = lm.lmstr1(x); // check return value VERIFY( 1 == info); @@ -484,8 +481,7 @@ void testLmstr() // do the computation lmstr_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimizeOptimumStorage(x, parameters); + info = lm.minimizeOptimumStorage(x); // check return values VERIFY( 1 == info); @@ -543,7 +539,7 @@ void testLmdif1() // do the computation lmdif_functor functor; LevenbergMarquardt lm(functor); - info = lm.minimizeNumericalDiff(x); + info = lm.lmdif1(x); // check return value VERIFY( 1 == info); @@ -571,8 +567,7 @@ void testLmdif() // do the computation lmdif_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimizeNumericalDiff(x, parameters); + info = lm.minimizeNumericalDiff(x); // check return values VERIFY( 1 == info); @@ -657,8 +652,7 @@ void testNistChwirut2(void) // do the computation chwirut2_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -676,10 +670,10 @@ void testNistChwirut2(void) */ x<< 0.15, 0.008, 0.010; // do the computation - parameters = LevenbergMarquardt::Parameters(); // get default back - parameters.ftol = 1.E6*epsilon(); - parameters.xtol = 1.E6*epsilon(); - info = lm.minimize(x, parameters); + lm.resetParameters(); + lm.parameters.ftol = 1.E6*epsilon(); + lm.parameters.xtol = 1.E6*epsilon(); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -738,8 +732,7 @@ void testNistMisra1a(void) // do the computation misra1a_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -756,7 +749,7 @@ void testNistMisra1a(void) */ x<< 250., 0.0005; // do the computation - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -825,8 +818,7 @@ void testNistHahn1(void) // do the computation hahn1_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -848,7 +840,7 @@ void testNistHahn1(void) */ x<< .1, -.1, .005, -.000001, -.005, .0001, -.0000001; // do the computation - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -912,8 +904,7 @@ void testNistMisra1d(void) // do the computation misra1d_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 3 == info); @@ -930,7 +921,7 @@ void testNistMisra1d(void) */ x<< 450., 0.0003; // do the computation - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -991,8 +982,7 @@ void testNistLanczos1(void) // do the computation lanczos1_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 2 == info); @@ -1013,7 +1003,7 @@ void testNistLanczos1(void) */ x<< 0.5, 0.7, 3.6, 4.2, 4., 6.3; // do the computation - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 2 == info); @@ -1078,8 +1068,7 @@ void testNistRat42(void) // do the computation rat42_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1097,7 +1086,7 @@ void testNistRat42(void) */ x<< 75., 2.5, 0.07; // do the computation - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1157,8 +1146,7 @@ void testNistMGH10(void) // do the computation MGH10_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 2 == info); @@ -1176,7 +1164,7 @@ void testNistMGH10(void) */ x<< 0.02, 4000., 250.; // do the computation - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 2 == info); @@ -1234,11 +1222,10 @@ void testNistBoxBOD(void) // do the computation BoxBOD_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - parameters.ftol = 1.E6*epsilon(); - parameters.xtol = 1.E6*epsilon(); - parameters.factor = 10.; - info = lm.minimize(x, parameters); + lm.parameters.ftol = 1.E6*epsilon(); + lm.parameters.xtol = 1.E6*epsilon(); + lm.parameters.factor = 10.; + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1255,10 +1242,10 @@ void testNistBoxBOD(void) */ x<< 100., 0.75; // do the computation - parameters = LevenbergMarquardt::Parameters(); // get default back - parameters.ftol = epsilon(); - parameters.xtol = epsilon(); - info = lm.minimize(x, parameters); + lm.resetParameters(); + lm.parameters.ftol = epsilon(); + lm.parameters.xtol = epsilon(); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1317,11 +1304,10 @@ void testNistMGH17(void) // do the computation MGH17_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - parameters.ftol = epsilon(); - parameters.xtol = epsilon(); - parameters.maxfev = 1000; - info = lm.minimize(x, parameters); + lm.parameters.ftol = epsilon(); + lm.parameters.xtol = epsilon(); + lm.parameters.maxfev = 1000; + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1341,8 +1327,8 @@ void testNistMGH17(void) */ x<< 0.5 ,1.5 ,-1 ,0.01 ,0.02; // do the computation - parameters = LevenbergMarquardt::Parameters(); // get default back - info = lm.minimize(x, parameters); + lm.resetParameters(); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1407,9 +1393,8 @@ void testNistMGH09(void) // do the computation MGH09_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - parameters.maxfev = 1000; - info = lm.minimize(x, parameters); + lm.parameters.maxfev = 1000; + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1428,8 +1413,8 @@ void testNistMGH09(void) */ x<< 0.25, 0.39, 0.415, 0.39; // do the computation - parameters = LevenbergMarquardt::Parameters(); - info = lm.minimize(x, parameters); + lm.resetParameters(); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1491,9 +1476,8 @@ void testNistBennett5(void) // do the computation Bennett5_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - parameters.maxfev = 1000; - info = lm.minimize(x, parameters); + lm.parameters.maxfev = 1000; + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1510,8 +1494,8 @@ void testNistBennett5(void) */ x<< -1500., 45., 0.85; // do the computation - parameters = LevenbergMarquardt::Parameters(); - info = lm.minimize(x, parameters); + lm.resetParameters(); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1579,10 +1563,9 @@ void testNistThurber(void) // do the computation thurber_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - parameters.ftol = 1.E4*epsilon(); - parameters.xtol = 1.E4*epsilon(); - info = lm.minimize(x, parameters); + lm.parameters.ftol = 1.E4*epsilon(); + lm.parameters.xtol = 1.E4*epsilon(); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1604,10 +1587,10 @@ void testNistThurber(void) */ x<< 1300 ,1500 ,500 ,75 ,1 ,0.4 ,0.05 ; // do the computation - parameters = LevenbergMarquardt::Parameters(); - parameters.ftol = 1.E4*epsilon(); - parameters.xtol = 1.E4*epsilon(); - info = lm.minimize(x, parameters); + lm.resetParameters(); + lm.parameters.ftol = 1.E4*epsilon(); + lm.parameters.xtol = 1.E4*epsilon(); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1672,10 +1655,9 @@ void testNistRat43(void) // do the computation rat43_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - parameters.ftol = 1.E6*epsilon(); - parameters.xtol = 1.E6*epsilon(); - info = lm.minimize(x, parameters); + lm.parameters.ftol = 1.E6*epsilon(); + lm.parameters.xtol = 1.E6*epsilon(); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1694,10 +1676,10 @@ void testNistRat43(void) */ x<< 700., 5., 0.75, 1.3; // do the computation - parameters = LevenbergMarquardt::Parameters(); // get default back - parameters.ftol = 1.E5*epsilon(); - parameters.xtol = 1.E5*epsilon(); - info = lm.minimize(x, parameters); + lm.resetParameters(); + lm.parameters.ftol = 1.E5*epsilon(); + lm.parameters.xtol = 1.E5*epsilon(); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1760,8 +1742,7 @@ void testNistEckerle4(void) // do the computation eckerle4_functor functor; LevenbergMarquardt lm(functor); - LevenbergMarquardt::Parameters parameters; - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info); @@ -1779,7 +1760,7 @@ void testNistEckerle4(void) */ x<< 1.5, 5., 450.; // do the computation - info = lm.minimize(x, parameters); + info = lm.minimize(x); // check return value VERIFY( 1 == info);