Применение сплайнов для численного интегрирования
Материал из MachineLearning.
Строка 52: | Строка 52: | ||
== Анализ метода и ошибок == | == Анализ метода и ошибок == | ||
+ | |||
Анализ формулы {{eqref|6}} показывает, что первый член в правой части совпадает с [[Методы прямоугольников и трапеций|формулой трапеций]]. Следовательно, второй член характеризует поправку к методу трапеций, которую дает использование сплайнов. | Анализ формулы {{eqref|6}} показывает, что первый член в правой части совпадает с [[Методы прямоугольников и трапеций|формулой трапеций]]. Следовательно, второй член характеризует поправку к методу трапеций, которую дает использование сплайнов. | ||
Строка 62: | Строка 63: | ||
::<tex>\frac{\tau_i^3}{12}(c_{i-1}+c_i)\approx\frac{\tau_i^3}{12}f_*'',</tex> | ::<tex>\frac{\tau_i^3}{12}(c_{i-1}+c_i)\approx\frac{\tau_i^3}{12}f_*'',</tex> | ||
- | где <tex>f_*''</tex> - вторая производная в некоторой | + | где <tex>f_*''</tex> - вторая производная в некоторой внутренней точке. Полученная оценка показывает, что добавка к формуле трапеций, которую дает использование сплайнов, компенсирует погрешность самой формулы трапеций. |
== Числовой пример == | == Числовой пример == | ||
+ | [[Изображение:Splineint.jpg|thumb|200px| График функции]] | ||
+ | Рассмотрим функцию <tex>f(t)=0.6t^3-3t^2+3t.</tex> Вычислим с помощью сплайн-квадратур приближенное значение интеграла | ||
+ | |||
+ | ::<tex>\int_0^4f(t)dt=\int_0^4(0.6t^3-3t^2+3t)dt=-1,6</tex> | ||
+ | |||
+ | и исследуем поведение погрешности. Результаты работы [[Media:Splineint.zip|программы]] приведены в следующей таблице: | ||
+ | |||
+ | ::{| class="standard" | ||
+ | !N | ||
+ | !J | ||
+ | !ε | ||
+ | |- | ||
+ | !5 | ||
+ | | -8.88236 | ||
+ | |7.28236 | ||
+ | |- | ||
+ | !10 | ||
+ | | -3.61479 | ||
+ | |2.01479 | ||
+ | |- | ||
+ | !20 | ||
+ | | -2.13136 | ||
+ | |0.53136 | ||
+ | |- | ||
+ | !50 | ||
+ | | -1.68776 | ||
+ | |0.087758 | ||
+ | |- | ||
+ | !100 | ||
+ | | -1.62217 | ||
+ | |0.022169 | ||
+ | |- | ||
+ | !200 | ||
+ | | -1.60557 | ||
+ | |0.00557 | ||
+ | |- | ||
+ | !500 | ||
+ | | -1.60089 | ||
+ | |0.00089 | ||
+ | |- | ||
+ | !1000 | ||
+ | | -1.60022 | ||
+ | |0.00022 | ||
+ | |- | ||
+ | !2000 | ||
+ | | -1.60006 | ||
+ | |0.00005 | ||
+ | |} | ||
+ | Здесь N - число отрезков, на которые разбивается интервал [0,4], J - приблизительное значение интеграла, ε - ошибка. | ||
+ | |||
+ | Как видно из таблицы, при малых N (особенно при N=5) ошибка невероятно велика. Однако с ростом N ошибка стремительно убывает, и приблизительное значение интеграла сходится к правильному значению. | ||
== Рекомендации программисту == | == Рекомендации программисту == | ||
+ | |||
===Пример программы=== | ===Пример программы=== | ||
+ | |||
Ниже приведен пример программы на языке C++, считающей приближенное значение интеграла с помощью сплайн-квадратур: | Ниже приведен пример программы на языке C++, считающей приближенное значение интеграла с помощью сплайн-квадратур: | ||
[[Media:Splineint.zip|Splineint.zip [0.7Кб]]] | [[Media:Splineint.zip|Splineint.zip [0.7Кб]]] | ||
Строка 79: | Строка 133: | ||
В 49-й строке <code>f[i]=0.6*x*x*x-3*x*x+3*x;</code> f[i] - интегрируемая функция. | В 49-й строке <code>f[i]=0.6*x*x*x-3*x*x+3*x;</code> f[i] - интегрируемая функция. | ||
- | |||
=== Случай с равномерной сеткой === | === Случай с равномерной сеткой === | ||
+ | |||
Пусть на отрезке <tex>[a,b]</tex> задана равномерная сетка, т.е. <tex>\tau_1=\tau_2=\dots=\tau_N=\tau.</tex> Тогда выражение {{eqref|6}} перепишется в виде: | Пусть на отрезке <tex>[a,b]</tex> задана равномерная сетка, т.е. <tex>\tau_1=\tau_2=\dots=\tau_N=\tau.</tex> Тогда выражение {{eqref|6}} перепишется в виде: | ||
Строка 98: | Строка 152: | ||
Несмотря на то, что <tex>c_2</tex> и <tex>c_N</tex> все равно придется вычислять методом прогонки, точность и скорость вычисления приближенного значения интеграла будут увеличены за счет сокращения числа слагаемых. | Несмотря на то, что <tex>c_2</tex> и <tex>c_N</tex> все равно придется вычислять методом прогонки, точность и скорость вычисления приближенного значения интеграла будут увеличены за счет сокращения числа слагаемых. | ||
- | |||
== Заключение == | == Заключение == | ||
+ | |||
Итак, мы получили, что погрешность сплайн-квадратуры меньше, чем погрешность метода трапеций. Однако алгоритм интегрирования с помощью сплайнов сложнее алгоритмов методов трапеций и Симпсона за счет необходимости решения СЛАУ для опрееления коэффициентов сплайнов <tex>c_i.</tex> Также при решении СЛАУ теряется точность. Поэтому рационально использовать сплайн-квадратуры в комплексе, когда сплайны применяются для сглаживания зависимостей, обработки эксперимениальных данных и т.п. | Итак, мы получили, что погрешность сплайн-квадратуры меньше, чем погрешность метода трапеций. Однако алгоритм интегрирования с помощью сплайнов сложнее алгоритмов методов трапеций и Симпсона за счет необходимости решения СЛАУ для опрееления коэффициентов сплайнов <tex>c_i.</tex> Также при решении СЛАУ теряется точность. Поэтому рационально использовать сплайн-квадратуры в комплексе, когда сплайны применяются для сглаживания зависимостей, обработки эксперимениальных данных и т.п. | ||
+ | |||
== Ссылки == | == Ссылки == | ||
* [[Практикум ММП ВМК, 4й курс, осень 2008|Практикум ММП ВМК, 4й курс, осень 2008]] | * [[Практикум ММП ВМК, 4й курс, осень 2008|Практикум ММП ВМК, 4й курс, осень 2008]] | ||
* [[Интерполяция кубическими сплайнами]] | * [[Интерполяция кубическими сплайнами]] | ||
+ | |||
== Список литературы == | == Список литературы == | ||
* http://www.intuit.ru/department/calculate/calcmathbase/7/1.html | * http://www.intuit.ru/department/calculate/calcmathbase/7/1.html | ||
Строка 109: | Строка 165: | ||
* http://myhomepage.h17.ru/Lect06/lect06.htm#02 | * http://myhomepage.h17.ru/Lect06/lect06.htm#02 | ||
* А.Е. Мудров. Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. - Томск:МП "РАСКО", 1991. | * А.Е. Мудров. Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. - Томск:МП "РАСКО", 1991. | ||
- | |||
- | |||
- | |||
[[Категория:Численное интегрирование]] | [[Категория:Численное интегрирование]] |
Версия 14:32, 19 октября 2008
Содержание |
Введение
Ставится задача вычислить интеграл вида
где и - нижний и верхний пределы интегрирования; - непрерывная функция на отрезке .
Введем на отрезке интегрирования сетку, определим значения функции в узлах сетки. Пусть имеется совокупность узлов Тогда интервал разобьется на участки Пусть также задана таблица Представим интеграл (1) в виде суммы интегралов по частичным отрезкам:
Сущность большинства методов вычисления определенных интегралов состоит в замене подынтегральной функции на отрезке аппроксимирующей функцией , для которой можно легко записать первообразную в элементарных функциях, т.е.
где S - приближеное значение интеграла; R - погрешность вычисления интеграла. Лучше всего изучена замена алгебраическим многочленом.
Изложение метода
Возьмем в (3) в качестве аппроксимирующей функции кубический сплайн:
- где
Коэффициенты вычисляются по следующим формулам:
Тогда интеграл (4) запишется как сумма интегралов от сплайнов:
Последняя формула упрощается при подстановке в неё выражений (5a), (5b) и (5d) для коэффициентов и
Нетрудно видеть, что матриа для решения СЛАУ (5c) есть трехдиагональная матрица с диагональным преобладанием. Поэтому коэффициенты можно вычислить с помощью метода прогонки.
Анализ метода и ошибок
Анализ формулы (6) показывает, что первый член в правой части совпадает с формулой трапеций. Следовательно, второй член характеризует поправку к методу трапеций, которую дает использование сплайнов.
Как следует из формулы (φ), коэффициенты выражаются через вторые производные
Это позволяет оценить второй член правой части формулы (6):
где - вторая производная в некоторой внутренней точке. Полученная оценка показывает, что добавка к формуле трапеций, которую дает использование сплайнов, компенсирует погрешность самой формулы трапеций.
Числовой пример
Рассмотрим функцию Вычислим с помощью сплайн-квадратур приближенное значение интеграла
и исследуем поведение погрешности. Результаты работы программы приведены в следующей таблице:
N J ε 5 -8.88236 7.28236 10 -3.61479 2.01479 20 -2.13136 0.53136 50 -1.68776 0.087758 100 -1.62217 0.022169 200 -1.60557 0.00557 500 -1.60089 0.00089 1000 -1.60022 0.00022 2000 -1.60006 0.00005
Здесь N - число отрезков, на которые разбивается интервал [0,4], J - приблизительное значение интеграла, ε - ошибка.
Как видно из таблицы, при малых N (особенно при N=5) ошибка невероятно велика. Однако с ростом N ошибка стремительно убывает, и приблизительное значение интеграла сходится к правильному значению.
Рекомендации программисту
Пример программы
Ниже приведен пример программы на языке C++, считающей приближенное значение интеграла с помощью сплайн-квадратур: Splineint.zip [0.7Кб]
Некоторые комментарии по работе с программой:
В 5-й строке const int N=100;
N - число отрезков
В 7-й строке const double a=1,b=6;
и - пределы интегрирования.
В 49-й строке f[i]=0.6*x*x*x-3*x*x+3*x;
f[i] - интегрируемая функция.
Случай с равномерной сеткой
Пусть на отрезке задана равномерная сетка, т.е. Тогда выражение (6) перепишется в виде:
Просуммируем уравнения (5c) от i=2 до N. Получим:
Подставим (8) в (7) и получим окончательное выражение для :
Несмотря на то, что и все равно придется вычислять методом прогонки, точность и скорость вычисления приближенного значения интеграла будут увеличены за счет сокращения числа слагаемых.
Заключение
Итак, мы получили, что погрешность сплайн-квадратуры меньше, чем погрешность метода трапеций. Однако алгоритм интегрирования с помощью сплайнов сложнее алгоритмов методов трапеций и Симпсона за счет необходимости решения СЛАУ для опрееления коэффициентов сплайнов Также при решении СЛАУ теряется точность. Поэтому рационально использовать сплайн-квадратуры в комплексе, когда сплайны применяются для сглаживания зависимостей, обработки эксперимениальных данных и т.п.
Ссылки
Список литературы
- http://www.intuit.ru/department/calculate/calcmathbase/7/1.html
- http://mathalgo.blogspot.com/2007/11/blog-post.html
- http://myhomepage.h17.ru/Lect06/lect06.htm#02
- А.Е. Мудров. Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. - Томск:МП "РАСКО", 1991.