docs: public static double minimize(double eps, int maxIterations, double a, double b, Function1D f)
      {
          if (a > b)
          {
              double tmp = b;
              b = a;
              a = tmp;
          }
  
          //Intitial values
          int iter = 0;
          
          double x1 = a + om_tau*(b-a);
          double f1 = f.f(x1);
          
          double x2 = a + tau*(b-a);
          double f2 = f.f(x2);
          
          while (b - a > 2 * eps && iter < maxIterations)
          {
              if(f1 > f2)
              {
                  a = x1;
                  x1 = x2;
                  f1 = f2;
                  x2 = a + tau*(b-a);
                  f2 = f.f(x2);
              }
              else//f1 < f2
              {
                  b = x2;
                  x2 = x1;
                  f2 = f1;
                  x1 = a + om_tau*(b-a);
                  f1 = f.f(x1);
              }
              iter++;
          }
          
          return (a + b) / 2.0;
      }