+ } else if (method == LAGRANGE_VEGAS) {
+ double 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 */
+ double max_deviation = 0.0;
+ if (x > a) {
+ x = a;
+ }
+ if (x < 0) {
+ x = 0;
+ }
+
+ lagrange_solve(Sys);
+
+ max_deviation =
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
+ max_deviation =
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
+ max_deviation =
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
+ max_deviation =
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
+
+ if (max_deviation > MAXMIN_PRECISION) {
+ WARN1("Max Deviation from optimal solution : %g", max_deviation);
+ WARN1("Found x = %1.20f", x);
+ WARN2("Deviation from optimal solution (R_1 = %g): %1.20f", x,
+ lmm_variable_getvalue(R_1) - x);
+ WARN2("Deviation from optimal solution (R_2 = %g): %1.20f",
+ b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
+ WARN2("Deviation from optimal solution (R_3 = %g): %1.20f", x,
+ lmm_variable_getvalue(R_3) - x);
+ WARN2("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
+ a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
+ }
+ } else if (method == LAGRANGE_RENO) {
+ double x;
+ double max_deviation = 0.0;
+
+ a_test_1 = a;
+ b_test_1 = b;
+ x = dichotomy(diff_lagrange_test_1, 0, a, 1e-8);
+
+ if (x < 0)
+ x = 0;
+ if (x > a)
+ x = a;
+ lagrange_solve(Sys);
+
+ max_deviation =
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
+ max_deviation =
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
+ max_deviation =
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
+ max_deviation =
+ MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
+
+ if (max_deviation > MAXMIN_PRECISION) {
+ WARN1("Max Deviation from optimal solution : %g", max_deviation);
+ WARN1("Found x = %1.20f", x);
+ WARN2("Deviation from optimal solution (R_1 = %g): %1.20f", x,
+ lmm_variable_getvalue(R_1) - x);
+ WARN2("Deviation from optimal solution (R_2 = %g): %1.20f",
+ b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
+ WARN2("Deviation from optimal solution (R_3 = %g): %1.20f", x,
+ lmm_variable_getvalue(R_3) - x);
+ WARN2("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
+ a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
+ }
+ } else {
+ xbt_assert0(0, "Invalid method");
+ }