public static double Derivative(RealFunction targetFunction, double x, DifferencesDirection direction)
        {
            if (targetFunction == null)
            {
                throw new ArgumentNullException("targetFunction");
            }
            switch (direction)
            {
            case DifferencesDirection.Backward:
            {
                return(NumericalDifferentiator.BackwardDerivative(targetFunction, x));
            }

            case DifferencesDirection.Central:
            {
                return(NumericalDifferentiator.CentralDerivative(targetFunction, x));
            }

            case DifferencesDirection.Forward:
            {
                return(NumericalDifferentiator.ForwardDerivative(targetFunction, x));
            }
            }
            throw new ArgumentOutOfRangeException("direction");
        }
        public static double CentralDerivative(RealFunction targetFunction, double x)
        {
            double num1;

            if (targetFunction == null)
            {
                throw new ArgumentNullException("targetFunction");
            }
            return(NumericalDifferentiator.CentralDerivative(targetFunction, x, out num1));
        }
 private double CentralDerivative(double x)
 {
     return(NumericalDifferentiator.CentralDerivative(this._function, x));
 }