/// <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); }