Метод прямоугольников – метод численного интегрирования функции одной переменной, заключающийся в замене подынтегральной функции на константу, для каждого элементарного отрезка.
Описание алгоритма
Если рассмотреть график подынтегральной функции, то метод будет заключаться в приближённом вычислении площади под графиком суммированием площадей конечного числа прямоугольников, ширина которых будет определяться расстоянием между соответствующими соседними узлами интегрирования, а высота — значением подынтегральной функции в этих узлах.
Если отрезок [a, b] является элементарным и не подвергается дальнейшему разбиению, значение интеграла можно найти по одной из трех формул:
Формула левых прямоугольников
Формула правых прямоугольников
Формула центральных прямоугольников
где fi = f(xi), xi = a + ih, h = (b - a)/n
Реализация алгоритма
using System;
class Program
{
static double LeftRectangle(Func<double, double> f, double a, double b, int n)
{
var h = (b - a) / n;
var sum = 0d;
for(var i = 0; i <= n-1; i++)
{
var x = a + i * h;
sum += f(x);
}
var result = h * sum;
return result;
}
static double RightRectangle(Func<double, double> f, double a, double b, int n)
{
var h = (b - a) / n;
var sum = 0d;
for (var i = 1; i <= n; i++)
{
var x = a + i * h;
sum += f(x);
}
var result = h * sum;
return result;
}
static double CentralRectangle(Func<double, double> f, double a, double b, int n)
{
var h = (b - a) / n;
var sum = (f(a) + f(b)) / 2;
for (var i = 1; i < n; i++)
{
var x = a + h * i;
sum += f(x);
}
var result = h * sum;
return result;
}
static void Main(string[] args)
{
//локальная функция
double f(double x) => x / (x - 1);
var result = LeftRectangle(f, 4, 10, 1000);
Console.WriteLine("Формула левых прямоугольников: {0}", result);
result = RightRectangle(f, 4, 10, 1000);
Console.WriteLine("Формула правых прямоугольников: {0}", result);
result = CentralRectangle(f, 4, 10, 1000);
Console.WriteLine("Формула средних прямоугольников: {0}", result);
Console.ReadKey();
}
}