/** Creates a function based on a user function */
  public Function(UserFunction f) {
    String[] names = f.getVarNames();

    this.function = f;
    this.argsNumber = names.length;
    this.args = new Argument[argsNumber];
    this.values = new double[argsNumber];

    for (int i = 0; i < argsNumber; i++) {
      String name = names[i];
      args[i] = new Argument(name, f.getVarIndex(name));
    }
  }