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

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

Опис алгоритму

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

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

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

Для більш точного обчислення інтеграла, інтервал [a, b] розбивають на N елементарних відрізків однакової довжини і застосовують формулу Сімпсона на складових відрізках. Кожен відрізок складається з сусідньої пари елементарних відрізків. Значення вихідного інтеграла є сумою результатів інтегрування на складових відрізках:

де 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();
    }
}

Дивіться також: