code: public static double min(DifferentiableMultivariateFunction func, int m, double[] x, double gtol) {
          return min(func, m, x, gtol, 200);
      }
docs: This method solves the unconstrained minimization problem
  <pre>
  min f(x),    x = (x1,x2,...,x_n),
  </pre>
  using the limited-memory BFGS method. The method is especially
  effective on problems involving a large number of variables. In
  a typical iteration of this method an approximation <code>Hk</code> to the
  inverse of the Hessian is obtained by applying <code>m</code> BFGS updates to
  a diagonal matrix <code>Hk0</code>, using information from the previous M steps.
  The user specifies the number <code>m</code>, which determines the amount of
  storage required by the routine. The algorithm is described in "On the
  limited memory BFGS method for large scale optimization", by D. Liu and J. Nocedal,
  Mathematical Programming B 45 (1989) 503-528.
  
  @param func the function to be minimized.
  
  @param m the number of corrections used in the L-BFGS update.
  Values of <code>m</code> less than 3 are not recommended;
  large values of <code>m</code> will result in excessive
  computing time. <code>3 &lt;= m &lt;= 7</code> is recommended.
  
  @param x on initial entry this must be set by the user to the values
  of the initial estimate of the solution vector. On exit with
  <code>iflag = 0</code>, it contains the values of the variables
  at the best point found (usually a solution).
  
  @param gtol the convergence requirement on zeroing the gradient.
  
  @return the minimum value of the function.