Численное интегрирование на разностных схемах#
Опишем методику численного расчета интеграла \(\int_a^b f(x) d x\) с помощью разностных схем в старших порядках. В отличие от квадратур, тут нам будут нужны производные.
Теорема. Пусть функция \(f(x)\) аналитична в каждой точке отрезка \([a ; b]\). Тогда её интеграл можно вычислять квадратурой на разностных схемах старшего порядка по формуле:
где коэффициенты не зависят от функции и задаются рекурсивными формулами:
Примечание. Обратите внимание, что квадратура вылезает за сетку на отрезке \([a ; b]\)! Это специфика этого метода. Про бесконечные пределы смотреть примечание ниже.
Доказательство.
Пусть функция \(f(x)\) аналитична в каждой точке отрезка \([a ; b]\). Тогда она аналитична хотя бы немного за пределами отрезка \([a ; b]\), т. е. на некотором интервале \(\left(a^{\prime} ; b^{\prime}\right)\supset[a ; b]\). Это условие нам понадобится для того чтобы использовать только симметричные разностные схемы даже на границах отрезка.
Разобьем отрезок \([a ; b]\) на \(J\) одинаковых кусочков и на каждом кусочке разложим \(f(x)\) в ряд Тейлора в средней точке каждого кусочка, после чего вычислим интеграл на каждом кусочке. Имеем,
Где \(\Delta x=(b-a) / 2 J=\cfrac{h}{2}\)- половина длины кусочка, \(J-\) число кусочков, \(x_j=a+(2 j+1) \Delta x-\) средняя точка \(j\) го кусочка, и учтено, что \(\sum_{j=0}^{J-1} O(\Delta x)=O(1)\) и что интеграл в симметричных пределах от нечетных степеней \(\left(x-x_j\right)^{2 n+1}\) равен нулю.
Итого получили метод численного расчёта интеграла произвольного порядка сходимости \(2m+2\), в котором нам нужны не только значения функции в узлах сетки, но и значения всех производных до \(2m\) включительно в этих же узлах с нужной точностью.
В следующем году в семинаре 4.1 будет выведена общая формула для симметричной разностной схемы произвольного порядка аппроксимации. Пока её вывод можно посмотреть в файле numer.pdf в доп. материалах. Сама формула:
Отметим, что это разностная схема не сходится с ростом \(m\)! при фиксированном шаге. Поэтому рекомендуется брать \(m\) меньше, чем точность исходных данных. Для машинной точности (аналитические функции, 16 значящих знаков) хорошее значение \(m=7\).
Нам нужны только чётные производные и даже немаксимального порядка аппроксимации (т.к. для каждой из них производные домножаются на \(\Delta x = \frac{h}{2}\) в каких-то степенях). Внесём нужные модификации в формулу:
Подставляя эту формулу в оценку интеграла, имеем:
Вводя коэфициенты
получаем квадратуру, основанную на разностных схемах на \(2m\) точках (заметье, что она вылезает за отрезок интегрирования!):
Примечание. Важно заметить, что квадратура для интеграла «вылезает» за пределы области интегрирования - отрезка \([a ; b]\). Это - специфика применяемых здесь разностных схем в старших порядках. Но зато, интеграл вычисляется очень быстро -\(J+2 m\) обращений к функции дают ошибку \(O\left(\Delta x^{2 m+2}\right)\). Так, при \(m=7\) вычисление сетки значений \(\exp \left(x_j\right)\) для интерграла \(\int_a^b e^x d x\) машинная точность \(10^{-16}\) достигается при длине кусочка \(x_{j+1}-x_j=0.25\). Тогда как обычный метод Симпсона (с ошибкой \(O\left(\Delta x^4\right)\) ) для достижения машинной точности требует шаг \(\Delta x=0.0001\), что на три порядка меньше!
Более того, для данной квадратуры естественно можно применять алгоритм Рунге для оценки погрешности.
Примечание. Отметим, что если выход сетки \(\left\{x_j\right\}\) за пределы области интегрирования недопустим (неаналитичность или бесконечные пределы), можно, как один из вариантов, вместо интеграла \(\int_a^b f(x) d x\) вычислять интеграл \(\int_0^1 f(x(t)) \dot{x}(t) d t\) с заменами, например,
или при \(b=+\infty\)
Аналитичность функции \(f(x(t)) \dot{x}(t)\) в каждой точке отрезка \(t \in[0 ; 1]\) должна гарантироваться заменой в обязательном порядке. В противном случае нужно использовать другую замену.