Методы парабол (Симпсона) и более высоких степеней (Ньютона - Котеса)
Материал из MachineLearning.
Содержание |
Введение
В данной статье описывается метод вычисления собственного интеграла гладкой функции при помощи квадратурных формул. Формулы Ньютона-Котеса обладают следующими особенностями:
- Необходимым условием сходимости данного метода является существование и ограниченность производной функции (порядок производной зависит от выбранной формулы)
- Формулы Ньютона-Котеса обладают высоким порядком точности
- Формулы порядка являются численно устойчивыми
Постановка математической задачи
Задача численного интегрирования состоит в нахождении приближенного значения интеграла
где - заданная и интегрируемая на отрезке функция. На отрезке вводится сетка и в качестве приближенного значения интеграла рассматривается число
где - значения функции в узлах , где - весовые множители, зависящие только от узлов, но не зависящие от выбора . Формула (2) называется квадратурной формулой. Задача численного интегрирования при помощи квадратур состоит в отыскании таких узлов и таких весов , чтобы погрешность квадратурной формулы
была минимальной по модулю для функции из заданного класса (величина зависит от гладкости ). Погрешность зависит как от расположения узлов, так и от выбора весовых коэффициентов. Введем на равномерную сетку с шагом , т.е. множество точек , и представим интеграл (1) в виде суммы интегралов по частичным отрезкам:
Для построения формулы численного интегрирования на всём отрезке достаточно построить квадратурную формулу для интеграла
на частичном отрезке и воспользоваться свойством (3).
Построение квадратурных формул
В силу вышеизложенного, вычисление приближенного значения интеграла производится при помощи квадратурной формулы
Данную формулу при помощи замены можно привести к стандартному виду
В общем случае узлы и веса неизвестны и подлежат определению.
Рассмотрим случай, когда узлы заданы и требуется найти веса квадратурной формулы . Будем пользоваться требованием: формула (5) должна быть точной для любого полинома степени . Для того чтобы полином степени удовлетворял данному требованию, достаточно потребовать, чтобы квадратурная формула была точной для любого одночлена степени . Учитывая, что , получаем уравнение
Эта система имеет единственное решение, так как её определителем является определитель Вандермонда, отличный от нуля если нет совпадающих узлов, .
Так, полагая , имеем систему , решением которой являются веса формулы Симпсона: . Таким образом, формула Симпсона является точной для полинома второй степени. Однако, в силу симметрии, она является точной и для всех полиномов третьей степени:
так как она точна для :
Формулы треугольника и трапеции точны для линейной функции,т.е. для полинома первой степени, в чем легко убедиться непосредственно. В общем случае в качестве можно выбрать интерполяционный полином Лагранжа
где - интерполяционный коэффициент Лагранжа. Из равенства
видно, что формула (5) верна для полинома степени , если весовые коэффициенты определяются по формуле
Формулы такого типа называют квадратурными формулами Котеса.
Изложение метода
Применение квадратурных формул
Вернемся к рассмотрению интеграла (1). Как было показано выше, данный интеграл заменой сводится к интегралу на единичном отрезке , а следовательно легко обобщить формулы для приближенного вычисления интеграла на единичном отрезке на произвольный. Применим аппарат квадратурных формул. Пусть задано равномерное разбиение отрезка с шагом , где обозначим . Пусть также выбрана некоторая квадратурная формула Ньютона-Котеса (то есть выбрана степень полинома , а следовательно каждый полином строится по точке сетки). Мы также считаем, что данный набор из точки можно разбить на поднаборы по точек с совпадающими крайним, то есть
- где
Тогда, суммируя значения квадратур на каждом поднаборе, получим приближенное значение искомого интеграла. Если обозначить весовые множители то приближенное значение интеграла можно записать в виде двойной суммы
Данный алгоритм естественным образом обобщается на случай, когда , где , а на каждом отрезке задана равномерная сетка. Тогда искомый интеграл равен
а на каждом из частичных отрезков приближенное значение интеграла вычисляется при помощи квадратурных формул.
Примеры квадратурных формул
Приведем примеры квадратурных формул Котеса на равномерной сетке с шагом , где обозначим :
- для 2 точек(метод трапеций),
- для 3 точек(метод Симпсона),
- для 4 точек,
- для 5 точек,
- для 6 точек,
- для 7 точек,
- для 8 точек,
- для 9 точек,
- для 10 точек,
Анализ метода
Погрешность квадратурной формулы
Пусть функция имеет -ю непрерывную производную на отрезке , то есть , - точки, в которых задано значение функции. Пусть используется квадратурная формула -го порядка. Введем функцию
Тогда формула для погрешности имеет следующий вид
где
Отсюда следует оценка для погрешности
при , где - постоянная, и при
Если не меняет знака на отрезке , то в силу теоремы о среднем имеем
Численная устойчивость квадратурных формул
Отметим, что формулы Ньютона-Котеса с редко используются из-за их численной неустойчивости, приводящей к резкому возрастанию вычислительной погрешности. Причиной такой неустойчивости является то, что коэффициенты формул Ньютона-Котеса при больших имеют различные знаки, а именно при существуют как положительные, так и отрицательные коэффициенты.
Рассмотрим квадратурную сумму
Предположим, что значения функции , заданной на отрезке , вычисляются с некоторой погрешностью, то есть вместо точного значения получаем приближенное значение . Тогда вместо получим сумму
где
Поскольку квадратурная формула точна для , имеем
и не зависит от .
Предположим теперь, что все коэффициенты неотрицательны. Тогда из ( 11 ) и ( 12 ) получим оценку
которая означает, что при больших погрешность в вычислении квадратурной суммы ( 10 ) имеет тот же порядок, что и погрешность в вычислении функции. В этом случае говорят, что сумма ( 10 ) вычисляется устойчиво.
Если коэффициенты имеют различные знаки, то может оказаться, что сумма не является равномерно ограниченной по и, следовательно погрешность в вычислении неограниченно возрастает с ростом . В этом случае вычисления по формуле ( 10 ) будут неустойчивы и пользоваться такой формулой при больших нельзя.
Числовой эксперимент
Приведем примеры вычисления интегралов с использованием формул Ньютона-Котеса. При реализации использовался язык C++, ниже приведен код функции, возвращающей приближенное значение интеграла.
Исходный код функции
На вход функция принимает 4 параметра
double a - левый конец исследуемого отрезка
double b - правый конец исследуемого отрезка
int Degree - степень используемого полинома
int Ndivisions - количество отрезков, на которые разбивается исходный. Совпадает со значением в формуле ( 7 )
f - интегрируемая функция
double f(double x) { return 1/x; } double NewtonCotes(double a, double b, int Degree, int Ndivisions) { int koef[10][10]={ 1,0,0,0,0,0,0,0,0,0, 1,1,0,0,0,0,0,0,0,0, 1,4,1,0,0,0,0,0,0,0, 1,3,3,1,0,0,0,0,0,0, 7,32,12,32,7,0,0,0,0,0, 19,75,50,50,75,19,0,0,0,0, 41,216,27,272,27,216,41,0,0,0, 751,3577,1323,2989,2989,1323,3577,751,0,0, 989,5888,-928,10496,-4540,10496,-928,5888,989,0, 2857,15741,1080,19344,5778,5778,19344,1080,15741,2857 }; double mltp[10]={1,1.0/2,1.0/3,3.0/8,2.0/45,5.0/288,1.0/140,7.0/17280,4.0/14175,9.0/89600}; if ((Degree<0) || (Degree>9))throw "Wrong degree"; if (a>=b) throw "Wrong segment"; if (Ndivisions<1) Ndivisions = 1; double Sum,PartSum; double h=(b-a)/(Degree*Ndivisions); Sum=0; for (int j=0; j<Ndivisions; j++) { PartSum=0; for (int i=0; i<=Degree; i++) PartSum+= koef[Degree][i]*f(a + (i+j*Degree) * h ); Sum+= mltp[Degree]*PartSum*h; } return Sum; }
Пример
Вычислим по формулам Котеса степеней от 1 до 9 значение интеграла
Вычисления будем производить не разбивая отрезок на частичные, то есть используя точку, где -степень полинома. Результаты приведены ниже в таблице. Округления проводились с точностью 6 знаков после запятой.
Степень полинома | Количество узлов | Приближенное значение интеграла | Точное значение интеграла | Погрешность результата | Погрешность формулы |
---|---|---|---|---|---|
1 | 2 | 0.75 | 0.693147 | 0.056853 | 0.166667 |
2 | 3 | 0.694444 | 0.693147 | 0.001297 | 0.008333 |
3 | 4 | 0.69375 | 0.693147 | 0.000603 | 0.003704 |
4 | 5 | 0.693175 | 0.693147 | 0.000028 | 0.000372 |
5 | 6 | 0.693163 | 0.693147 | 0.000016 | 0.000210 |
6 | 7 | 0.693148 | 0.693147 | 0.000001 | 0.000026 |
7 | 8 | 0.693148 | 0.693147 | 0.000001 | 0.000016 |
8 | 9 | 0.693147 | 0.693147 | 0 | 0.000002 |
9 | 10 | 0.693147 | 0.693147 | 0 | 0 |
Рекомендации программисту
Автоматический выбор шага интегрирования с помощью апостериорной оценки погрешности методом Рунге
Величина погрешности численного интегрирования зависит как от шага сетки , так и от гладкости подынтегральной функции . В величину погрешности, кроме входит также величина , которая может сильно меняться на отрезке и заранее неизвестна. Для уменьшения величины погрешности, можно измельчить сетку на заданном отрезке. Но при этом необходимо апостериорно оценивать погрешность. Такую оценку погрешности можно осуществить методом Рунге. Рассмотрим применение какой-то квадратурной формулы на частичном отрезке . Обозначим за значение интеграла на всем отреpке, за значение интеграла на -ом частичном отрезке, за приближенное значение интеграла на всем отрезке, полученное при помощи заданной квадратурной формулы и равномерном сетки с шагом , а за приближенное значение интеграла на -ом частичном отрезке. Пусть данная квадратурная формула на данном частичном отрезке имеет порядок точности , то есть
где с - некоторая константа. Тогда
откуда получаем
Пусть используется составная квадратурная формула
причем на всех частичных отрезках используются квадратурные формулы с одним и тем же порядком точности (или же,в частности, одна и та же формула). Проведем на каждом частичном отрезке вычисления дважды - один раз с шагом , второй раз с шагом и апостериорно оценим погрешность по правилу Рунге ( 14 ). Если для заданного при будут выполняться неравенства
то получим
то есть будет достигнута заданная точность .
Если же на каком-то из частичных отрезков оценка ( 15 ) не будет выполняться, то шаг на этом отрезке надо измельчить еще в два раза и снова оценить погрешность. Измельчение сетки на данном отрезке следует проводить до тех пор, пока не будет достигнута оценка вида ( 15 ). Заметим, что для некоторой функции такое измельчение может продолжаться слишком долго. Поэтому в соответствующей программе следует предусмотреть ограничение сверху на число измельчений.
Таким образом, автоматический выбор шага интегрирования приводит к тому, что интегрирование ведется с крупным шагом на участках плавного изменения функции и с мелким шагом - на участках быстрого изменения . Это позволяет при заданной точности уменьшить количество вычислений значений по сравнению с расчетом на сетке с постоянным шагом. Подчеркнем, что для нахождения сумм не надо пересчитывать значения во всех узлах, достаточно вычислять только в новых узлах.
Заключение
Формулы Симпсона и Ньютона-Котеса являются хорошим аппаратом для вычисления определенного интеграла достаточное число раз непрерывно дифференцируемой функции. На примере формул -го порядка мы видим, что при ограниченной производной -го порядка точность формул есть , где - шаг сетки, а . То есть при выполнении условий применимости данного метода, формулы дают высокий порядок сходимости. Однако при больших , в частности уже при , вычисление приближенного значения интеграла становится численно неустойчиво, что делает их неприменимыми.
Список литературы
- А.А.Самарский, А.В.Гулин. Численные методы М.: Наука, 1989.
- А.А.Самарский. Введение в численные методы М.: Наука, 1982.
- http://mathworld.wolfram.com/Newton-CotesFormulas.html