Метод прямоугольников

"Я хочу, чтобы меня услышали в России. Абсолютно все. Тысячи жертв, сотни пленных, которые просто не могут понять ради чего их отправили в Украину.
Отправили в Украину умирать. Убивать других. Чем скорее вы скажете своей власти, что войну нужно немедленно остановить – тем больше ваших людей останутся живыми.
Мы видим, что действительно есть выступления ваших граждан против войны. И мы знаем, что многие в России сейчас просто шокированы подлостью и жестокостью власти. И это очень правильная реакция. Я благодарю вас за эту реакцию! Спасибо Леониду Парфёнову, Дмитрию Муратову, Юрию Дудю, Лие Ахеджаковой, Валерию Меладзе – ну, и тысячам. Тысячам достойных других россиян, чья совесть звучит – звучит громко.
Просто остановите тех, кто лжет вам. Лжет нам. Лжет всему миру.
Нужно закончить эту войну. Мы можем жить в мире. В мире глобальном. В мире человечества".

Метод прямоугольников – метод численного интегрирования функции одной переменной, заключающийся в замене подынтегральной функции на константу, для каждого элементарного отрезка.

Описание алгоритма

Если рассмотреть график подынтегральной функции, то метод будет заключаться в приближённом вычислении площади под графиком суммированием площадей конечного числа прямоугольников, ширина которых будет определяться расстоянием между соответствующими соседними узлами интегрирования, а высота — значением подынтегральной функции в этих узлах.

Если отрезок [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();
    }
}

Смотрите также: