- if (method == MAXMIN) {
- Sys->solve();
- } else {
- double x;
- if (method == LAGRANGE_VEGAS) {
- x = 3 * a / 4 - 3 * b / 8 + sqrt(9 * b * b + 4 * a * a - 4 * a * b) / 8;
- /* Computed with mupad and D_f=1.0 */
- if (x > a) {
- x = a;
- }
- if (x < 0) {
- x = 0;
- }
- } else if (method == LAGRANGE_RENO) {
- a_test_1 = a;
- b_test_1 = b;
- x = dichotomy(0, a, 1e-13);
-
- if (x < 0)
- x = 0;
- if (x > a)
- x = a;
- } else {
- xbt_die( "Invalid method");
- }
-
- Sys->solve();
-
- double max_deviation = 0.0;
- max_deviation = std::max(max_deviation, fabs(R_1->get_value() - x));
- max_deviation = std::max(max_deviation, fabs(R_3->get_value() - x));
- max_deviation = std::max(max_deviation, fabs(R_2->get_value() - (b - a + x)));
- max_deviation = std::max(max_deviation, fabs(R_1_2_3->get_value() - (a - x)));
-
- if (max_deviation > 0.00001) { // Legacy value used in lagrange.c
- XBT_WARN("Max Deviation from optimal solution : %g", max_deviation);
- XBT_WARN("Found x = %1.20f", x);
- XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x, R_1->get_value() - x);
- XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f", b - a + x, R_2->get_value() - (b - a + x));
- XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x, R_3->get_value() - x);
- XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f", a - x, R_1_2_3->get_value() - (a - x));
- }
- }