Add Meyer Function (Problem 10) to more_garbow_hillstrom.cc Change-Id: Ibec5fb212de55ffe6910a4ca65db75609e7f1545
diff --git a/examples/more_garbow_hillstrom.cc b/examples/more_garbow_hillstrom.cc index d3b58b5..d98e57c 100644 --- a/examples/more_garbow_hillstrom.cc +++ b/examples/more_garbow_hillstrom.cc
@@ -223,9 +223,9 @@ const T x2 = x[1]; const T x3 = x[2]; - double y[] = {0.0009, 0.0044, 0.0175, 0.0540, 0.1295, 0.2420, 0.3521, - 0.3989, - 0.3521, 0.2420, 0.1295, 0.0540, 0.0175, 0.0044, 0.0009}; + const double y[] = {0.0009, 0.0044, 0.0175, 0.0540, 0.1295, 0.2420, 0.3521, + 0.3989, + 0.3521, 0.2420, 0.1295, 0.0540, 0.0175, 0.0044, 0.0009}; for (int i = 0; i < 15; ++i) { const T t_i = T((8.0 - i - 1.0) / 2.0); const T y_i = T(y[i]); @@ -239,6 +239,31 @@ const double TestProblem9::constrained_optimal_cost = 0.11279300e-7; const double TestProblem9::unconstrained_optimal_cost = 0.112793e-7; +// Meyer function. +BEGIN_MGH_PROBLEM(TestProblem10, 3, 16) + const T x1 = x[0]; + const T x2 = x[1]; + const T x3 = x[2]; + + const double y[] = {34780, 28610, 23650, 19630, 16370, 13720, 11540, 9744, + 8261, 7030, 6005, 5147, 4427, 3820, 3307, 2872}; + + for (int i = 0; i < 16; ++i) { + T t = T(45 + 5.0 * (i + 1)); + residual[i] = x1 * exp(x2 / (t + x3)) - y[i]; + } +END_MGH_PROBLEM + + +const double TestProblem10::initial_x[] = {0.02, 4000, 250}; +const double TestProblem10::lower_bounds[] ={ + -kDoubleMax, -kDoubleMax, -kDoubleMax}; +const double TestProblem10::upper_bounds[] ={ + kDoubleMax, kDoubleMax, kDoubleMax}; +const double TestProblem10::constrained_optimal_cost = + std::numeric_limits<double>::quiet_NaN(); +const double TestProblem10::unconstrained_optimal_cost = 87.9458; + #undef BEGIN_MGH_PROBLEM #undef END_MGH_PROBLEM @@ -336,6 +361,7 @@ UNCONSTRAINED_SOLVE(7); UNCONSTRAINED_SOLVE(8); UNCONSTRAINED_SOLVE(9); + UNCONSTRAINED_SOLVE(10); std::cout << "\nConstrained problems\n"; CONSTRAINED_SOLVE(3);