Интерполяция кубическими сплайнами
Материал из MachineLearning.
(Новая: == Введение == === Постановка математической задачи === Одной из основных задач численного анализа являе...) |
м |
||
(14 промежуточных версий не показаны.) | |||
Строка 70: | Строка 70: | ||
Подставив теперь выражения для <tex>b_i, b_{i+1}</tex> и <tex>d_i</tex> в первую формулу {{eqref|5}}, после несложных преобразований получаем для определения <tex>c_i</tex> разностное уравнение второго порядка | Подставив теперь выражения для <tex>b_i, b_{i+1}</tex> и <tex>d_i</tex> в первую формулу {{eqref|5}}, после несложных преобразований получаем для определения <tex>c_i</tex> разностное уравнение второго порядка | ||
{{ eqno | 6 }} | {{ eqno | 6 }} | ||
- | <p align="center"><tex>h_ic_i+2(h_i+h_{i+1})c_{i+1}+h_{i+1}c_{i+2}= | + | <p align="center"><tex>h_ic_i+2(h_i+h_{i+1})c_{i+1}+h_{i+1}c_{i+2}=3\left(\frac{y_{i+1}-y_i}{h_{i+1}} - \frac{y_i-y_{i-1}}{h_i}\right), i=1, 2, \cdots, n-1.</tex></p> |
С краевыми условиями | С краевыми условиями | ||
Строка 110: | Строка 110: | ||
<p align="center"><tex>x_n = {F_n-A_n\beta_n \over C_n+A_n\alpha_n} </tex></p> | <p align="center"><tex>x_n = {F_n-A_n\beta_n \over C_n+A_n\alpha_n} </tex></p> | ||
- | == | + | === Пример: интерполирование неизвестной функции === |
Построим интерполянту для для функции <tex>f</tex>, заданной следующим образом: | Построим интерполянту для для функции <tex>f</tex>, заданной следующим образом: | ||
[[Изображение:Interpolation_data.png|thumb|300px|Вводные значения для задачи интерполяции ]] | [[Изображение:Interpolation_data.png|thumb|300px|Вводные значения для задачи интерполяции ]] | ||
Строка 138: | Строка 138: | ||
|} | |} | ||
+ | В результате интерполяции были рассчитаны следующие коэффициенты интерполянты: | ||
+ | [[Изображение:Interpolation_result.png|thumb|300px|Результат интерполяции ]] | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! <tex>a</tex> | ||
+ | ! <tex>b</tex> | ||
+ | ! <tex>c</tex> | ||
+ | ! <tex>d</tex> | ||
+ | ! Отрезок | ||
+ | |- | ||
+ | | 1,0002 | ||
+ | | -0,140113846 | ||
+ | | 0,440979231 | ||
+ | | -0,266965385 | ||
+ | | <tex>1\le x\le 2</tex> | ||
+ | |- | ||
+ | | 1,0341 | ||
+ | | -0,291901538 | ||
+ | | -0,359916923 | ||
+ | | 0,217718462 | ||
+ | | <tex>2\le x\le 3</tex> | ||
+ | |- | ||
+ | | 0,6 | ||
+ | | -0,22553 | ||
+ | | 0,293238462 | ||
+ | | -0,266658462 | ||
+ | | <tex>3\le x\le 4</tex> | ||
+ | |- | ||
+ | | 0,40105 | ||
+ | | -0,100328462 | ||
+ | | -0,506736923 | ||
+ | | 0,306015385 | ||
+ | | <tex>4\le x\le 5</tex> | ||
+ | |- | ||
+ | | 0,1 | ||
+ | | -0,134456154 | ||
+ | | 0,411309231 | ||
+ | | -0,137103077 | ||
+ | | <tex>5\le x\le 6</tex> | ||
+ | |- | ||
+ | |} | ||
- | == | + | == Ошибка интерполяции == |
+ | Нас будет интересовать поведение максимального уклонения сплайна от интерполируемой функции в зависимости от максимального расстояния между соседними узлами интерполирования, т.е. зависимость величины | ||
+ | <p align=center><tex>\parallel s-f\parallel = \max_{x\in[a,b]}|s(x)-f(x)|</tex></p> | ||
+ | от шага h, где <tex>h = \max_{k=1,2,\cdots,n-1}|x_{k+1}-x_k|</tex>. | ||
- | == | + | Известно, что если функция <tex>ƒ(x)</tex> имеет четыре непрерывные производные, то для ошибки интерполяции определенным выше кубическим сплайном <tex>s(x)</tex> верна следующая оценка |
+ | <p align = center><tex>\parallel s-f\parallel \le \frac{5}{384}h^4\parallel \frac{d^4f}{df^4}\parallel</tex></p> | ||
+ | |||
+ | причем константа <tex>\frac{5}{384}</tex> в этом неравенстве является наилучшей из возможных | ||
+ | === Пример: интерполяция синуса === | ||
+ | Постром интерполянту функции <tex>f=sin(4x)</tex> на отрезке <tex>[-1;1]</tex>, взяв равномерно отстоящие узлы с шагом 0.5 и шагом 0.25, и сравним полученные результаты. | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! | ||
+ | ! Ошибка интерполяции | ||
+ | ! Оценка ошибки | ||
+ | ! Иллюстрация | ||
+ | |- | ||
+ | ! <tex>h=0.5</tex> | ||
+ | | 0.429685 | ||
+ | | 3.(3) | ||
+ | |[[Изображение:Interpolation_result_sin_0,5.png|thumb|300px|Результат интерполяции sin(4x) с шагом 0.5]] | ||
+ | |- | ||
+ | ! <tex>h=0.25</tex> | ||
+ | | 0.005167 | ||
+ | | 0.208(3) | ||
+ | |[[Изображение:Interpolation_result_sin_0,25.png|thumb|300px|Результат интерполяции sin(4x) с шагом 0.25]] | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | Как видно из полученных иллюстрации, уже при шаге 0.25 интерполянта визуально ничем не отличается от исходной функции. | ||
+ | |||
+ | Код программы на языке С++ с помощью которой были произведены все расчеты, можно скачать [[Media:SplineInterpolation.zip|тут]]. | ||
== Список литературы == | == Список литературы == | ||
Строка 150: | Строка 222: | ||
* ''А.А.Самарский.'' Введение в численные методы М.: Наука, 1982. | * ''А.А.Самарский.'' Введение в численные методы М.: Наука, 1982. | ||
* ''Костомаров Д.П., Фаворский А.П.'' Вводные лекции по численным методам | * ''Костомаров Д.П., Фаворский А.П.'' Вводные лекции по численным методам | ||
+ | * ''Н.Н.Калиткин.'' Численные методы М.: Наука, 1978. | ||
+ | |||
+ | == См. также == | ||
+ | * [[Интерполяция каноническим полиномом]] | ||
+ | * [[Тригонометрическая интерполяция]] | ||
+ | * [[Рациональная интерполяция]] | ||
+ | * [[Интерполяция функций двух переменных, проблема выбора узлов | Проблема выбора узлов для интерполяции]] | ||
+ | * [[Практикум ММП ВМК, 4й курс, осень 2008]] | ||
+ | |||
{{stub}} | {{stub}} | ||
- | [[Категория: | + | [[Категория:Учебные задачи]] |
Текущая версия
Содержание |
Введение
Постановка математической задачи
Одной из основных задач численного анализа является задача об интерполяции функций. Пусть на отрезке задана сетка и в её узлах заданы значения функции , равные . Требуется построить интерполянту — функцию , совпадающую с функцией в узлах сетки:
Основная цель интерполяции — получить быстрый (экономичный) алгоритм вычисления значений для значений , не содержащихся в таблице данных.
Интерполируюшие функции , как правило строятся в виде линейных комбинаций некоторых элементарных функций:
где — фиксированный линейно независимые функции, — не определенные пока коэффициенты.
Из условия (1) получаем систему из уравнений относительно коэффициентов :
Предположим, что система функций такова, что при любом выборе узлов отличен от нуля определитель системы:
.
Тогда по заданным однозначно определяются коэффициенты .
Изложение метода
Интерполяция кубическими сплайнами является частным случаем кусочно-полиномиальной интерполцией. В этом специальном случае между любыми двумя соседними узлами функция интерполируется кубическим полиномом. его коэффициенты на каждом интервале определяются из условий сопряжения в узлах:
Кроме того, на границе при и ставятся условия
Будем искать кубический полином в виде
Из условия имеем
Вычислим производные:
и потребуем их непрерывности при :
Общее число неизвестных коэффициентов, очевидно, равно , число уравнений (4) и (5) равно . Недостающие два уравнения получаем из условия (2) при и :
Выражение из (5) , подставляя это выражение в (4) и исключая , получим
Подставив теперь выражения для и в первую формулу (5), после несложных преобразований получаем для определения разностное уравнение второго порядка
С краевыми условиями
Условие эквивалентно условию и уравнению . Разностное уравнение (6) с условиями (7) можно решить методом прогонки, представив в виде системы линейных алгебраических уравнений вида , где вектор соответствует вектору , вектор поэлементно равен правой части уравнения (6), а матрица имеет следующий вид:
где и .
Метод прогонки
Метод прогонки, основан на предположении, что искомые неизвестные связаны рекуррентным соотношением:
Используя это соотношение, выразим и через и подставим в i-e уравнение:
,где - правая часть i-го уравнения. Это соотношение будет выполняться независимо от решения, если потребовать
Отсюда следует:
Из первого уравнения получим:
После нахождения прогоночных коэффициентов и , используя уравнение (1), получим решение системы. При этом,
Пример: интерполирование неизвестной функции
Построим интерполянту для для функции , заданной следующим образом:
1 | 1.0002 |
2 | 1.0341 |
3 | 0.6 |
4 | 0.40105 |
5 | 0.1 |
6 | 0.23975 |
В результате интерполяции были рассчитаны следующие коэффициенты интерполянты:
Отрезок | ||||
---|---|---|---|---|
1,0002 | -0,140113846 | 0,440979231 | -0,266965385 | |
1,0341 | -0,291901538 | -0,359916923 | 0,217718462 | |
0,6 | -0,22553 | 0,293238462 | -0,266658462 | |
0,40105 | -0,100328462 | -0,506736923 | 0,306015385 | |
0,1 | -0,134456154 | 0,411309231 | -0,137103077 |
Ошибка интерполяции
Нас будет интересовать поведение максимального уклонения сплайна от интерполируемой функции в зависимости от максимального расстояния между соседними узлами интерполирования, т.е. зависимость величины
от шага h, где .
Известно, что если функция имеет четыре непрерывные производные, то для ошибки интерполяции определенным выше кубическим сплайном верна следующая оценка
причем константа в этом неравенстве является наилучшей из возможных
Пример: интерполяция синуса
Постром интерполянту функции на отрезке , взяв равномерно отстоящие узлы с шагом 0.5 и шагом 0.25, и сравним полученные результаты.
Ошибка интерполяции | Оценка ошибки | Иллюстрация | |
---|---|---|---|
0.429685 | 3.(3) | ||
0.005167 | 0.208(3) |
Как видно из полученных иллюстрации, уже при шаге 0.25 интерполянта визуально ничем не отличается от исходной функции.
Код программы на языке С++ с помощью которой были произведены все расчеты, можно скачать тут.
Список литературы
- А.А.Самарский, А.В.Гулин. Численные методы М.: Наука, 1989.
- А.А.Самарский. Введение в численные методы М.: Наука, 1982.
- Костомаров Д.П., Фаворский А.П. Вводные лекции по численным методам
- Н.Н.Калиткин. Численные методы М.: Наука, 1978.
См. также
- Интерполяция каноническим полиномом
- Тригонометрическая интерполяция
- Рациональная интерполяция
- Проблема выбора узлов для интерполяции
- Практикум ММП ВМК, 4й курс, осень 2008