Beispiel #1
0
        public void Minimize(Func<IVector, double> f, Func<IVector, IVector> gradient, int n)
        {
            _b = Matrix.CreateI(n, n, () => new RealNumber(1), () => new RealNumber(0));
            _x = new Vector(new[] {new RealNumber(0), new RealNumber(0)});
            _f = f;
            IVector grad;
            do
            {
                _gradient = gradient(_x);
                var direction = CalculateMinimizeDirection(_b, _gradient);
                var step = CalculateStepAndChangeAlpha(direction, f);

                grad = gradient(_x); //nablaF(xk + 1)
                var y = grad.Sum(_gradient.Negate()); //yk

                //its time to calculate b(k + 1)
                _b = CalculateInvertedPseudoGaussian(_b, step, y);
            } while (grad.Norm.IsGreater(_errorThreshold));
        }
Beispiel #2
0
 private static IVector CalculateMinimizeDirection(IMatrix invertedPseudoGessian, IVector gradient)
 {
     return invertedPseudoGessian.Mul(gradient.Negate());
 }