/// <summary>
        /// Численное итегрирование.
        /// </summary>
        /// <param name="func">Функция, для которой нужно вычислить интеграл.</param>
        /// <param name="boundaries">Отрезок, на котором выполняется интегрирование.</param>
        /// <param name="n">Количество разбиений отрезка.</param>
        /// <param name="integrationMethod">Метод интегрирования.</param>
        /// <returns>Результат интегрирования.</returns>
        public static double Integrate(Func <double, object[], double> func, object[] args,
                                       Boundaries boundaries, IntegrationMethod integrationMethod)
        {
            double result;

            switch (integrationMethod)
            {
            case IntegrationMethod.Rectangles:
                result = RectangleIntegration(func, args, boundaries);
                break;

            case IntegrationMethod.Trapezium:
                result = TrapeziumIntegration(func, args, boundaries);
                break;

            default:
                result = double.MinValue;
                break;
            }

            return(result);
        }
 /// <summary>
 /// Метод трапеций.
 /// </summary>
 /// <param name="func">Функция интегрирования.</param>
 /// <param name="boundaries">Отрезок интегрирования.</param>
 /// <returns>Результат интегрирования.</returns>
 /// <exception cref="NotImplementedException"></exception>
 private static double TrapeziumIntegration(Func <double, object[], double> func, object[] args, Boundaries boundaries)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        /// Метод прямоугольников.
        /// </summary>
        /// <param name="func">Функция интегрирования.</param>
        /// <param name="boundaries">Отрезок интегрирования.</param>
        /// <returns>Результат интегрирования.</returns>
        private static double RectangleIntegration(Func <double, object[], double> func, object[] args, Boundaries boundaries)
        {
            var result = 0.0;

            var t = boundaries.Left;

            for (var i = 0; i < boundaries.N; i++)
            {
                result += func(t, args) * boundaries.Step;
                t      += boundaries.Step;
            }

            return(result);
        }