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

Матеріал з testwiki
Перейти до навігації Перейти до пошуку
Метод Сімпсона одержується за допомогою інтерполяції функції f(x) (блакитний колір) квадратичним многочленом P(x) (червоний колір).

Метод Сімпсона є одним із методів чисельного інтегрування. Названий на честь британського математика Томаса Сімпсона (1710—1761).

Формула

Формулою Сімпсона називається інтеграл від інтерполяційного многочлена другого степеня на відрізку [a,b]:

abf(x)dxabp2(x)dx=ba6(f(a)+4f(a+b2)+f(b)),

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

Похибка

При умові, що функція f(x) на відрізку [a,b] має похідну четвертого порядку, похибка E(f), дорівнює:

E(f)=(ba)52880f(4)(ζ),   ζ[a,b].

Зважаючи, що значення ζ переважно не є відомим, для оцінки похибки використовується нерівність:

|E(f)|(ba)52880max\limits x[a,b]|f(4)(x)|.

Виведення формули

Формула Сімпсона може бути виведена за допомогою багатьох різних способів.

Квадратична інтерполяція

Якщо замінити функцію f(x) квадратичним поліномом P(x) що приймає ті ж значення що й f(x) у точках a,b і m = (a+b) / 2. використавши інтерполяційну формулу Лагранжа, то одержимо формулу:

P(x)=f(a)(xm)(xb)(am)(ab)+f(m)(xa)(xb)(ma)(mb)+f(b)(xa)(xm)(ba)(bm).

Після необхідних обчислень одержуємо:

abP(x)dx=ba6[f(a)+4f(a+b2)+f(b)].

Використання методів прямокутників і трапецій

У цьому способі виведення використовуються метод прямокутників:

M=(ba)f(a+b2)

і метод трапецій:

T=12(ba)(f(a)+f(b)).

Похибки цих наближень дорівнюють

124(ba)3f(a)+O((ba)4)і112(ba)3f(a)+O((ba)4),

відповідно. Звідси випливає, що аби позбутися третього степеня слід взяти для наближення величину

2M+T3.

Однак таким чином одержується формула Сімпсона.

Метод невизначених коефіцієнтів

Запишемо в загальному виді:

1baabf(x)dxαf(a)+βf(a+b2)+γf(b).

Коефіцієнти α, β і γ можуть бути знайдені з вимоги, що дане наближення є точним для всіх многочленів другого степеня. Таким чином знову ж одержується метод Сімпсона.

Ітераційна формула

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

abf(x)dxh3(12f(x0)+k=1N1f(xk)+2k=1Nf(xk1+xk2)+12f(xN))
де h=baN величина кроку, а xk=a+kh межі відрізків.

Загальну похибку E(f) при інтегруванні на відрізку [a,b] з кроком xixi1=h визначають за формулою:

|E(f)|(ba)2880h4max\limits x[a,b]|f(4)(x)|.

При неможливості оцінити похибку за допомогою четвертої похідної можна використати слабшу оцінку:

|E(f)|(ba)288h3max\limits x[a,b]|f(3)(x)|.

Приклади реалізації

Реалізація на C#:

using System;

namespace NumericIntgeration
{
    internal class Program
    {
        private delegate double Func(double x);

        private static void Main()
        {
            const int n = 10000;
            double result = SimpsonMethod(0.0, 2.0, n, x => x * Math.Exp(Math.Sqrt(x)));
            Console.WriteLine("x = {0}", result);

            Console.ReadKey();
        }
        private static double SimpsonMethod(double a, double b, int n, Func func)
        {
            double h = (b - a) / n;
            double s = (func(a) + func(b)) * 0.5;
            for (int i = 1; i <= n - 1; i++)
            {
                double xk = a + h * i; //xk
                double xk1 = a + h * (i - 1); //Xk-1
                s += func(xk) + 2 * func((xk1 + xk) / 2);
            }
            var x = a + h * n; //xk
            var x1 = a + h * (n - 1); //Xk-1
            s += 2 * func((x1 + x) / 2);

            return s * h / 3.0;
        }
    }
}

Див. також

Література

Шаблон:Додаткові джерела