Loading [MathJax]/jax/output/HTML-CSS/jax.js
Skip to main content
LibreTexts - Ukrayinska

9.3: Правило Сімпсона

Наш аналіз правила середньої точки та правила трапеції показав, що обидва методи маютьO(1/N2) числову похибку. В обох випадках похибка може бути простежена до одного і того ж джерела: той факт, що інтегральна оцінка по кожному сегменту відрізняється від результату ряду Тейлора в другому порядку - термін, пропорційнийf(xn). Це пропонує спосіб покращити результат числового інтегрування: ми могли б взяти середньозважене середнє значення правила середньої точки та правила трапеції, таким чином, що числові помилки другого порядку з двох схем скасовують один одного! Це метод числового інтегрування, відомий як правило Сімпсона.

Якщо бути точним, давайте знову розглянемо пару сусідніх відрізків, які лежать між рівнорозташованими точками дискретизації{xn1,xn,xn+1}. Як виведено вище, інтеграл над цими сегментами може бути розширений Тейлором як

In=2f(xn)Δx+f(xn)3Δx3+O(Δx5)+

Для порівняння, оцінювачі правила середньої точки та правила трапеції для інтеграла є

Impn=2f(xn)Δx

Itrapzn=2f(xn)Δx+f(xn)2Δx3+O(Δx5).

Отже, ми могли б взяти наступне середньозважене:

Isimpn=13Impn+23Itrapzn=2f(xn)Δx+f(xn)3Δx3+O(Δx5).

Таке середньозважене буде відповідати результату серії Тейлора аж доO(Δx4)! (Ви можете перевірити самі, чи відрізняютьсяO(Δx5) умови.) Підводячи підсумок, правило Сімпсона для цього набору з трьох пунктів можна записати як

Isimpn=13[2f(xn)Δx]+23Δx[f(xn1)2+f(xn)+f(xn+1)2]=Δx3[f(xn1)+4f(xn)+f(xn+1)].

Загальна числова похибка, над наборомO(N) сегментів, дорівнюєO(1/N4). Це вдосконалення двох повноважень1/N над правилами трапцезіуму та середньої точки! Що ще краще, це те, що він включає в себе точно таку ж кількість арифметичних операцій, що і правило трапеції. Це так близько до безкоштовного обіду, як ви можете отримати в обчислювальній науці.

9.3.1 Реалізація правила Сімпсона на Python

У Scipy правило Сімпсона реалізовано функцією scipy.integrate.simps, яка визначається у підмодулі scipy.integrate. Подібно до функції trapz, це може бути викликано або simps (y, x) або simps (y, dx=s) для оцінки інтегралаydx, використовуючи елементи x як точки дискретизації, при цьому y вказуючи набір значень для integrand.

Оскільки правило Сімпсона вимагає поділу сегментів на пари, якщо ви вкажете парну кількість точок дискретизації в x (тобто непарну кількість сегментів), функція вирішує це, виконуючи оцінку правила трапеції на першому та останньому сегментах. Зазвичай помилка незначна, тому не турбуйтеся про цю деталь

Ось приклад симпсів в дії:

>>> from scipy import *
>>> from scipy.integrate import simps
>>> x = linspace(0,10,25)
>>> y = exp(-x)
>>> t = simps(y,x)
>>> print(t)
1.00011864276

Для такої ж кількості точок дискретизації дає правило трапеції1.01438; точний результат -0.9999546 Ясно, правило Сімпсона більш точне.