Метод Симпсона

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

Метод Симпсона – один из приемов численного интегрирования.

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

Суть метода заключается в приближении подынтегральной функции на отрезке [a, b] интерполяционным многочленом второй степени p2(x), то есть приближение графика функции на отрезке параболой.

Формула Симпсона:

где f(a), f((a + b)/2) и f(b) – значения функции в соответствующих точках (на концах отрезка и в его середине).

Для более точного вычисления интеграла, интервал [a, b] разбивают на N = 2n элементарных отрезков одинаковой длины и применяют формулу Симпсона на составных отрезках. Каждый составной отрезок состоит из соседней пары элементарных отрезков. Значение исходного интеграла является суммой результатов интегрирования на составных отрезках:

где h = (b - a)/N – шаг интегрирования, а xk = a + kh – чередующиеся границы и середины составных отрезков, на которых применяется формула Симпсона.

Реализация алгоритма

Россияне ваши войска ведут ужасную войну против Украины, убивают мирное население, не щадя женщин и детей! Мы отстаиваем свою родину, потери войск РФ за несколько дней войны превысили потери в Чеченской войне!
Заберите с Украины своих отцов, мужей, сыновей пока они живы!

Не молчите! Остановите войну! НЕТ ВОЙНЕ!
Пока ты молчишь, гибнут мирные украинцы!
using System;

class Program
{
    //метод для вычисления значения интеграла по формуле Симпсона
    private static double Simpson(Func<double, double> f, double a, double b, int n)
    {
        var h = (b - a) / n;
        var sum1 = 0d;
        var sum2 = 0d;
        for (var k = 1; k <= n; k++)
        {
            var xk = a + k * h;
            if (k <= n - 1)
            {
                sum1 += f(xk);
            }

            var xk_1 = a + (k - 1) * h;
            sum2 += f((xk + xk_1) / 2);
        }

        var result = h / 3d * (1d / 2d * f(a) + sum1 + 2 * sum2 + 1d / 2d * f(b));
        return result;
    }

    static void Main(string[] args)
    {
        //локальная функция
        double f(double x) => x / (x - 1);

        var result = Simpson(f, 4, 10, 1000);
        Console.WriteLine("S = {0}", result);

        Console.ReadKey();
    }
}

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