Accord.Math.Differentiation.FiniteDifferences.Compute C# (CSharp) Method

Compute() public method

Computes the gradient at the given point x.
public Compute ( ) : double[]
return double[]
        public double[] Compute(params double[] x)
        {
            if (x == null)
                throw new ArgumentNullException("x");

            if (x.Length != parameters)
                throw new ArgumentException("The number of dimensions does not match.", "x");


            double output = Function(x);

            double[] gradient = new double[x.Length];
            for (int i = 0; i < gradient.Length; i++)
                gradient[i] = derivative(x, i, output);

            return gradient;
        }

Same methods

FiniteDifferences::Compute ( double x, double gradient ) : void

Usage Example

        public void QuadraticConstraintConstructorTest()
        {
            IObjectiveFunction objective = null;

            double[,] quadraticTerms = 
            {
                {  1, 2, 3 },
                {  4, 5, 6 },
                {  7, 8, 9 },
            };

            double[] linearTerms = { 1, 2, 3 };

            objective = new NonlinearObjectiveFunction(3, f => f[0] + f[1] + f[2]);

            QuadraticConstraint target = new QuadraticConstraint(objective,
                quadraticTerms, linearTerms,
                ConstraintType.LesserThanOrEqualTo, 0);

            var function = target.Function;
            var gradient = target.Gradient;

            FiniteDifferences fd = new FiniteDifferences(3, function);

            double[][] x =
            {
                new double[] { 1, 2, 3 },
                new double[] { 3, 1, 4 },
                new double[] { -6 , 5, 9 },
                new double[] { 31, 25, 246 },
                new double[] { -0.102, 0, 10 },
            };


            { // Function test
                for (int i = 0; i < x.Length; i++)
                {
                    double expected =
                        (x[i].Multiply(quadraticTerms)).InnerProduct(x[i])
                        + linearTerms.InnerProduct(x[i]);

                    double actual = function(x[i]);

                    Assert.AreEqual(expected, actual, 1e-8);
                }
            }

            { // Gradient test
                for (int i = 0; i < x.Length; i++)
                {
                    double[] expected = fd.Compute(x[i]);
                    double[] actual = gradient(x[i]);

                    for (int j = 0; j < actual.Length; j++)
                        Assert.AreEqual(expected[j], actual[j], 1e-8);
                }
            }


        }
All Usage Examples Of Accord.Math.Differentiation.FiniteDifferences::Compute