Квадратуры Гаусса#
Квадратуры Гаусса-Лежандра#
До настоящего времени мы рассматривали формулы для численного интегрирования только на равномерных сетках. Это сильно упрощает формулы, но и порождает существенный недостаток этих методов — за счет того, что точки выбираются эквидистантно, происходит быстрое накопление погрешностей аппроксимации. Также чаще приходится вычислять функцию, что в некоторых случаях можнт быть крайне дорогой операцией.
В квадратурах Ньютона-Гаусса мы «варьировали» только коэффициенты \(w_i\), тогда как сейчас поиграемся и с положениями узлов \(x_i\).
Рассмотрим интегралы на отрезке \([-1, 1]\):
Легко понять, что любая задача может быть сведена к данному виду заменой
Используя многочлены Лежандра можно вывести аналитически положения узлов \(x_i\) и весов \(w_i\), которые подойдут для «любой» заранее заданной функции. В данном случае, \(x_i\) будут корнями многочленов Лежандра (подробнее см. квадратуры Гаусса-Кристофеля)
Пример применения квадратуры Гаусса#
Вычислим интеграл
Используя 2-х точечную квадратуру Гаусса-Лежандра, мы получим численный ответ $\( I \approx I_G=\frac{(\pi-0)}{2}\left[4\left(\frac{\pi+0}{2}-\frac{\pi-0}{2 \sqrt{3}}\right)^3+4\left(\frac{\pi+0}{2}+\frac{\pi-0}{2 \sqrt{3}}\right)^3\right]=97,409091 \)$
6 знаков после запятой, вычислив функцию всего 2 раза! (Это не всегда так, к сожелению - зависит от производной).
Пример на scipy
#
Узлы, как и коэффициенты, уже за нас вычислены. Достаточно обратиться к нужным модулям.
import numpy as np
from scipy.special import roots_legendre
roots, weights = roots_legendre(9) # получаем x_i и w_i для нужного n
f = lambda t : t + 1/t # интеграл этой функции на [1, 2] равен 1.5 + np.log(2)
# Преобразуем корни многочленов Лежандра от стандартного [-1, 1] до [a, b]
a = 1
b = 2
t = (b - a)/2 * roots + (a + b)/2
print(np.sum((b - a)/2 * f(t) * weights))
print(1.5 + np.log(2))
2.1931471805599276
2.1931471805599454
Получили ответ с точностью до 14-го знака после запятой, зная значение функции только в 9-ти точках…
Достоинства и недостатки квадратур Гаусса#
Достоинства
Требуется малое количество вычислений подынтегральной функции (обычно \(n=10\) хватает для всего)
Маленькая погрешность округления из-за малого количества арифметических действий
Скорость-скорость-скорость
Недостатки
Требуется вычисление функции в определенных точках, что не всегда осуществимо на практике
Не подходит для осциллирующих функций
Квадратуры Гаусса-Кристофеля#
В некоторых приложениях возникает необходимость вычисления интегралов с заданной весовой функцией \(w(x)\):
При некотором наборе весовых функций могут оказаться полезными квадратурные формулы Гаусса-Кристоффеля вида
Теорема о точности квадратур Гаусса.
Квадратурная формула выше точна для многочленов степени не выше \(2 n-1\), если
ее узлами \(x_i\) являются корни многочлена \(p_n(x)\) из семейства многочленов, ортогональных на промежутке интегрирования \((a, b)\) с весом \(w(x)\):
весовыми коэффициентами являются числа
Таблица с видами весового коэффициента, и какие к ним брать многочлены (и на каком отрезке).
\(p_n(x)\) |
\(\omega(x)\) |
\(a, b\) |
|
---|---|---|---|
Legendre |
\(P_n(x)\) |
1 |
-1,1 |
Hermite |
\(H_n(x)\) |
\(e^{-x^2}\) |
- ထ, ထ |
Chebyshev I kind |
\(T_n(x)\) |
\(\frac{1}{\sqrt{1-x^2}}\) |
-1,1 |
Chebyshev II kind |
\(U_n(x)\) |
\(\sqrt{1-x^2}\) |
-1,1 |
Laguerre |
\(L_n^{(\alpha)}(x)\) |
\(x^\alpha e^{-x}\) |
0, ထ |