/// <summary> /// Minimize the function /// </summary> /// <param name="diffFunc">Function to minimize</param><param name="startingPoint">Starting point</param> /// <returns> /// The minimum /// </returns> public double[] Minimize(DiffFunc diffFunc, double[] startingPoint) { var solver = new CompactQuasiNewtonSolver(); var length = startingPoint.Length; this.variables = new int[length]; for (var index = 0; index < length; ++index) { solver.AddVariable(null, out this.variables[index]); solver.SetValue(this.variables[index], startingPoint[index]); } int vid; solver.AddRow(null, out vid); solver.AddGoal(vid, 0, true); solver.FunctionEvaluator = this.FunctionEvaluator; solver.GradientEvaluator = this.GradientEvaluator; this.func = diffFunc; this.curGradient = new double[length]; this.curVariableVals = new double[length]; var nonlinearSolution = solver.Solve(this.solverParams); var numArray = new double[length]; for (var index = 0; index < length; ++index) { numArray[index] = nonlinearSolution.GetValue(this.variables[index]); } return numArray; }
/// <summary> /// Minimize the function /// </summary> /// <param name="diffFunc">Function to minimize</param><param name="startingPoint">Starting point</param> /// <returns> /// The minimum /// </returns> public double[] Minimize(DiffFunc diffFunc, double[] startingPoint) { var solver = new CompactQuasiNewtonSolver(); var length = startingPoint.Length; this.variables = new int[length]; for (var index = 0; index < length; ++index) { solver.AddVariable(null, out this.variables[index]); solver.SetValue(this.variables[index], startingPoint[index]); } int vid; solver.AddRow(null, out vid); solver.AddGoal(vid, 0, true); solver.FunctionEvaluator = this.FunctionEvaluator; solver.GradientEvaluator = this.GradientEvaluator; this.func = diffFunc; this.curGradient = new double[length]; this.curVariableVals = new double[length]; var nonlinearSolution = solver.Solve(this.solverParams); var numArray = new double[length]; for (var index = 0; index < length; ++index) { numArray[index] = nonlinearSolution.GetValue(this.variables[index]); } return(numArray); }