Участник:Александр Двойнев/песочница
Материал из MachineLearning.
(→Изложение метода) |
(→Изложение метода) |
||
Строка 42: | Строка 42: | ||
::<tex>\tau_{i-1}c_{i-1}+2(\tau_{i-1}+\tau_i)c_i+\tau_i c_{i+1}=3\left(\frac{f_i-f_{i-1}}{\tau_i} \; - \; \frac{f_{i-1}-f_{i-2}}{\tau_{i-1}}\right),\;\; 2 \le i \le N</tex> | ::<tex>\tau_{i-1}c_{i-1}+2(\tau_{i-1}+\tau_i)c_i+\tau_i c_{i+1}=3\left(\frac{f_i-f_{i-1}}{\tau_i} \; - \; \frac{f_{i-1}-f_{i-2}}{\tau_{i-1}}\right),\;\; 2 \le i \le N</tex> | ||
Нетрудно видеть, что матрица для решения [[СЛАУ]] {{eqref|5c}} есть трёхдиагональная матрица с диагональным преобладанием. Поэтому коэффициенты <tex>c_i</tex> можно вычислить с помощью метода прогонки. | Нетрудно видеть, что матрица для решения [[СЛАУ]] {{eqref|5c}} есть трёхдиагональная матрица с диагональным преобладанием. Поэтому коэффициенты <tex>c_i</tex> можно вычислить с помощью метода прогонки. | ||
+ | |||
Коэффициенты <tex>c_1</tex> и <tex>c_{N+1}</tex> получаются из условий свободных концов сплайна. Обычно требуют нулевую кривизну на концах сплайна и берут <tex>c_1=c_{N+1}=0.</tex> | Коэффициенты <tex>c_1</tex> и <tex>c_{N+1}</tex> получаются из условий свободных концов сплайна. Обычно требуют нулевую кривизну на концах сплайна и берут <tex>c_1=c_{N+1}=0.</tex> | ||
- | + | В итоге интеграл {{eqref|1*}} запишется как сумма интегралов от сплайнов: | |
- | ::<tex>J= | + | ::<tex>J=\sum_{i=1}^N\;\int_{t_{i-1}}^{t_i}\varphi_i(t)dt+R=\sum_{i=1}^N\left(a_i\tau_i+{b_i\over2}\tau_i^2+{c_i\over3}\tau_i^3+{d_i\over4}\tau_i^4\right)+R.</tex> |
Последняя формула упрощается при подстановке в неё выражений {{eqref|5a}}, {{eqref|5b}} и {{eqref|5d}} для коэффициентов <tex>a_i,\;b_i</tex> и <tex>d_i:</tex> | Последняя формула упрощается при подстановке в неё выражений {{eqref|5a}}, {{eqref|5b}} и {{eqref|5d}} для коэффициентов <tex>a_i,\;b_i</tex> и <tex>d_i:</tex> | ||
{{eqno|6}} | {{eqno|6}} | ||
- | ::<tex>J | + | ::<tex>J = \sum_{i=1}^N\;\frac{f_i+f_{i-1}}{2}\tau_i\;-\;\sum_{i=1}^N\;\frac{\tau_i^3(c_{i+1}+c_i)}{12}+R.</tex> |
== Анализ метода и ошибок == | == Анализ метода и ошибок == |
Версия 12:34, 13 ноября 2008
Содержание |
Введение
Ставится задача вычислить интеграл вида
где и - нижний и верхний пределы интегрирования; - непрерывная функция на отрезке .
Пусть на отрезке интегрирования дана сетка, т.е. имеется совокупность узлов Тогда интервал разобьется на участки . Пусть также известны значения функции в узлах этой сетки, т.е. задана таблица Представим интеграл (1) в виде суммы интегралов по частичным отрезкам:
Сущность большинства методов вычисления определённых интегралов состоит в замене подынтегральной функции на отрезке аппроксимирующей функцией , для которой можно легко записать первообразную в элементарных функциях, т.е.
где - приближённое значение интеграла на i-м отрезке, а - погрешность вычисления интеграла, . Лучше всего изучена замена алгебраическим многочленом.
Изложение метода
Возьмём в (3) в качестве аппроксимирующей функции кубический сплайн:
- где
Известно, что коэффициенты и вычисляются по следующим формулам:
А коэффициенты являются решением СЛАУ:
Нетрудно видеть, что матрица для решения СЛАУ (5c) есть трёхдиагональная матрица с диагональным преобладанием. Поэтому коэффициенты можно вычислить с помощью метода прогонки.
Коэффициенты и получаются из условий свободных концов сплайна. Обычно требуют нулевую кривизну на концах сплайна и берут
В итоге интеграл (1*) запишется как сумма интегралов от сплайнов:
Последняя формула упрощается при подстановке в неё выражений (5a), (5b) и (5d) для коэффициентов и
Анализ метода и ошибок
Анализ формулы (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.