Example #1
0
        public VectorMinimizationResult FindRoot(IObjectiveVectorFunction objective, Vector <double> initialGuess)
        {
            var jacobian = Matrix <double> .Build.Dense(initialGuess.Count, initialGuess.Count);

            var guess = initialGuess.Clone();
            int iterCount;

            for (iterCount = 0; iterCount < _maximumIterations; iterCount++)
            {
                objective.EvaluateAt(guess);
                var baseValues = objective.Value.Clone();
                if (baseValues.AbsoluteMaximum() < _convergenceTolerance)
                {
                    break;
                }
                UpdateJacobian(jacobian, objective);
                var inverse = jacobian.Inverse();
                guess = guess - inverse * baseValues;
            }

            var result = new VectorMinimizationResult
            {
                FunctionInfoAtMinimum = objective,
                Iterations            = iterCount,
                MinimizingPoint       = guess,
                ReasonForExit         = ExitCondition.Converged
            };

            return(result);
        }
        public VectorMinimizationResult FindRoot(IObjectiveVectorFunction objective, Vector <double> initialGuess)
        {
            var function = new FunctionEvaluator(objective);
            var root     = Broyden.FindRoot(function.Eval, initialGuess.ToArray(), 1e-8, 100, 1e-8);
            var result   = new VectorMinimizationResult
            {
                FunctionInfoAtMinimum = objective,
                Iterations            = -1,
                MinimizingPoint       = new DenseVector(root),
                ReasonForExit         = ExitCondition.Converged
            };

            return(result);
        }