Кубический сплайн: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Onuch-v (обсуждение | вклад) |
Ksvsvk (обсуждение | вклад) →Построение: изменены индексы интервалов |
||
(не показана 41 промежуточная версия 19 участников) | |||
Строка 1: | Строка 1: | ||
'''Кубический сплайн''' — гладкая функция, область определения которой разбита на конечное число отрезков, на каждом из которых она совпадает с некоторым кубическим многочленом (полиномом). |
|||
⚫ | |||
== Описание == |
|||
⚫ | Функция <math>f(x)</math>задана на отрезке <math>[a,b]</math>, разбитом на части <math>[x_{i-1},x_i]</math>, <math>a=x_0< x_1< ... <x_N=b</math>. [[Куб (алгебра)|Кубическим]] [[сплайн]]ом дефекта 1 (разность между степенью многочлена и порядком его производной) называется [[Функция (математика)|функция]] <math>S(x)</math>, которая: |
||
* на каждом отрезке <math>[x_{i-1},x_i]</math> является [[многочлен]]ом степени не выше третьей; |
* на каждом отрезке <math>[x_{i-1},x_i]</math> является [[многочлен]]ом степени не выше третьей; |
||
* имеет непрерывные первую и вторую [[Производная функции|производные]] на всём отрезке <math>[a,b]</math>; |
* имеет непрерывные первую и вторую [[Производная функции|производные]] на всём отрезке <math>[a,b]</math>; |
||
* в точках <math>x_i</math> выполняется равенство <math>S(x_i) = f(x_i)</math>, т. е. сплайн <math>S(x)</math> [[Интерполяция|интерполирует]] функцию |
* в точках <math>x_i</math> выполняется равенство <math>S(x_i) = f(x_i)</math>, т. е. сплайн <math>S(x)</math> [[Интерполяция|интерполирует]] функцию <math>f</math>в точках <math>x_i</math>. |
||
Для однозначного задания сплайна перечисленных условий недостаточно, для построения сплайна необходимо наложить |
Для однозначного задания сплайна перечисленных условий недостаточно, для построения сплайна необходимо наложить дополнительные требования — граничные условия: |
||
# "Естественный сплайн" — граничные условия вида: <math>S''(a) = S''(b) = 0</math>; |
|||
Естественным кубическим сплайном называется кубический сплайн, удовлетворяющий также граничным условиям вида: |
|||
: <math>S''(a) = S''(b) = 0 |
# Непрерывность второй производной — граничные условия вида: <math>S'''(a) = S'''(b) = 0</math>; |
||
# Периодический сплайн — граничные условия вида: <math>S'(a) = S'(b)</math>и <math>S''(a) = S''(b)</math>. |
|||
'''Теорема:''' Для любой функции <math>f</math> и любого разбиения отрезка <math>[a,b]</math> существует ровно один естественный сплайн |
'''Теорема:''' Для любой функции <math>f</math> и любого разбиения отрезка <math>[a,b]</math>на части <math>[x_{i-1},x_i]</math>существует ровно один естественный сплайн <math>S_{i}(x)</math>, удовлетворяющий перечисленным выше условиям. |
||
Эта теорема является следствием более общей теоремы [[Шёнберг, Исаак|Шёнберга]]-Уитни об условиях существования интерполяционного сплайна. |
Эта теорема является следствием более общей теоремы [[Шёнберг, Исаак|Шёнберга]]-Уитни об условиях существования интерполяционного сплайна. |
||
== Построение == |
== Построение == |
||
На каждом отрезке <math>[x_{i |
На каждом отрезке <math>[x_{i},x_{i+1}],\ i=\overline{0,N-1}</math> функция <math>S(x)</math> есть полином третьей степени <math>S_i(x)</math>, коэффициенты которого надо определить. Запишем для удобства <math>S_i(x)</math> в виде: |
||
: |
:<math>S_i(x) = a_i + b_i(x - x_i) + {c_i}(x-x_i)^2 + {d_i}(x - x_i)^3</math> |
||
тогда |
тогда |
||
: |
:<math>S_i\left(x_i\right) = a_i, \quad S'_i(x_i) = b_i, \quad S''_i(x_i) = 2c_i, \quad |
||
⚫ | |||
Условия непрерывности всех производных до второго порядка включительно |
Условия непрерывности всех производных, до второго порядка включительно, записываются в виде <br /> |
||
⚫ | |||
записываются в виде <br /> |
|||
<math> |
:<math>S'_i\left(x_{i-1}\right) = S'_{i-1}(x_{i-1}),</math><br /> |
||
<math>S'_i\left(x_{i-1}\right) = S'_{i-1}(x_{i-1})</math><br /> |
:<math>S''_i\left(x_{i-1}\right) = S''_{i-1}(x_{i-1}),</math><br /> |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
: <math>h_{i}c_{i-1} + 2(h_i + h_{i+1})c_i + h_{i+1}c_{i+1} = |
|||
6\left({{f_{i+1} - f_i}\over{h_{i+1}}} - {{f_{i} - f_{i-1}}\over{h_{i}}}\right)</math> |
|||
⚫ | |||
: <math>b_i = {1\over2}h_ic_i - {1\over6}h^2_id_i + {{f_i - f_{i-1}}\over{h_i}}= {{f_i - f_{i-1}}\over{h_i}} + {{h_i(2c_i + c_{i-1})}\over6}</math> |
|||
⚫ | |||
⚫ | |||
:<math id="ai">a_{i} = f(x_{i})</math>; |
|||
⚫ | |||
== Компьютерный код == |
|||
:<math>b_{i} = \frac{a_{i} - a_{i - 1}}{h_{i}} - \frac{2 \cdot c_{i-1} + c_{i}}{3} \cdot h_{i}</math>; |
|||
[https://github.com/ValexCorp/Cubic-Interpolation Cubic Interpolation: C#-библиотека с открытым исходным кодом кубической интерполяции сплайном по алгоритму, изложенному Carl de Boor в своей книге. Автор: Вадим А. Онучин, Valex Corp.] {{sfn|de Boor|1978}} |
|||
:<math id="ci">c_{i - 1} \cdot h_{i} + 2 \cdot c_{i} \cdot(h_{i} + h_{i+1}) + c_{i + 1} \cdot h_{i+1} = 3 \cdot \left(\frac{a_{i+1} - a_{i}}{h_{i+1}} - \frac{a_{i} - a_{i - 1}}{h_{i}}\right)</math>, |
|||
:причем <math>c_{N} = S''(x_{N}) = 0</math> и <math>c_{1} - 3 \cdot d_{1} \cdot h_{1} = S''(x_{0}) = 0</math> <ref>{{Книга|автор=Аристова Е. Н., Завьялова Н. А., Лобанов А. И.|заглавие=Практические занятия по вычислительной математике Часть 1|год=2014|язык=ru|страницы=159-160|страниц=243|isbn=978-5-7417-0541-4}}</ref>. |
|||
⚫ | |||
== Литература == |
== Литература == |
||
# {{книга | автор = de Boor, Carl | заглавие = A Practical Guide to Splines | ссылка = https://archive.org/details/practicalguideto0027debo | издательство=Springer-Verlag | место=New York | год = 1978 | ref = Boor}} |
|||
# {{книга|автор=Роджерс Д., Адамс Дж.|заглавие=Математические основы машинной графики|издательство=Мир|место=М.|Издание=2-е, перераб. и доп.|станиц=604|год=2001|isbn=5-03-002143-4}} |
|||
# {{книга|автор=[[Костомаров, Дмитрий Павлович|Костомаров Д. П.]], [[Фаворский, Антон Павлович|Фаворский А. П.]]|заглавие=Вводные лекции по численным методам}} |
|||
* {{книга |автор=Волков Е. А. |заглавие=Численные методы |издание=Учеб. пособие для вузов. — 2-е изд., испр. |место={{М.}} |издательство=Наука |год=1987 |страниц=248 |часть=Глава 1. Приближение функций многочленами. § 11. Сплайны |страницы=63-68}} |
|||
# {{книга |автор=Волков Е. А. |заглавие=Численные методы |издание=Учеб. пособие для вузов. — 2-е изд., испр. |место={{М.}} |издательство=Наука |год=1987 |страниц=248 |часть=Глава 1. Приближение функций многочленами. § 11. Сплайны |страницы=63-68}} |
|||
== Ссылки == |
== Ссылки == |
||
* [http://rudtp.pp.ru/cubicspline/ Интерполяция кубическими сплайнами на JavaScript (рус.)] |
* [http://rudtp.pp.ru/cubicspline/ Интерполяция кубическими сплайнами на JavaScript (рус.)] |
||
* [https://github.com/ValexCorp/Cubic-Interpolation Cubic Interpolation] {{sfn|Boor|1978}} |
|||
== Примечания == |
|||
{{примечания}} |
|||
{{rq|refless}} |
{{rq|refless}} |
||
Строка 59: | Строка 65: | ||
[[Категория:Численные методы]] |
[[Категория:Численные методы]] |
||
[[Категория:Интерполяция]] |
[[Категория:Интерполяция]] |
||
[[Категория:Статьи с примерами кода C++]] |
Текущая версия от 06:38, 15 октября 2024
Кубический сплайн — гладкая функция, область определения которой разбита на конечное число отрезков, на каждом из которых она совпадает с некоторым кубическим многочленом (полиномом).
Описание
[править | править код]Функция задана на отрезке , разбитом на части , . Кубическим сплайном дефекта 1 (разность между степенью многочлена и порядком его производной) называется функция , которая:
- на каждом отрезке является многочленом степени не выше третьей;
- имеет непрерывные первую и вторую производные на всём отрезке ;
- в точках выполняется равенство , т. е. сплайн интерполирует функцию в точках .
Для однозначного задания сплайна перечисленных условий недостаточно, для построения сплайна необходимо наложить дополнительные требования — граничные условия:
- "Естественный сплайн" — граничные условия вида: ;
- Непрерывность второй производной — граничные условия вида: ;
- Периодический сплайн — граничные условия вида: и .
Теорема: Для любой функции и любого разбиения отрезка на части существует ровно один естественный сплайн , удовлетворяющий перечисленным выше условиям.
Эта теорема является следствием более общей теоремы Шёнберга-Уитни об условиях существования интерполяционного сплайна.
Построение
[править | править код]На каждом отрезке функция есть полином третьей степени , коэффициенты которого надо определить. Запишем для удобства в виде:
тогда
Условия непрерывности всех производных, до второго порядка включительно, записываются в виде
где меняется от до а условия интерполяции в виде
Обозначим
Отсюда получаем формулы для вычисления коэффициентов "Естественного сплайна":
- ;
- ;
- ;
- ,
- причем и [1].
Если учесть, что , то вычисление можно провести с помощью метода прогонки для трёхдиагональной матрицы.
Литература
[править | править код]- de Boor, Carl. A Practical Guide to Splines. — New York: Springer-Verlag, 1978.
- Роджерс Д., Адамс Дж. Математические основы машинной графики. — М.: Мир, 2001. — ISBN 5-03-002143-4.
- Костомаров Д. П., Фаворский А. П. Вводные лекции по численным методам.
- Волков Е. А. Глава 1. Приближение функций многочленами. § 11. Сплайны // Численные методы. — Учеб. пособие для вузов. — 2-е изд., испр.. — М.: Наука, 1987. — С. 63-68. — 248 с.
Ссылки
[править | править код]Примечания
[править | править код]- ↑ Аристова Е. Н., Завьялова Н. А., Лобанов А. И. Практические занятия по вычислительной математике Часть 1ISBN 978-5-7417-0541-4. . — 2014. — С. 159-160. — 243 с. —
- ↑ Boor, 1978.
Для улучшения этой статьи желательно:
|