Сплайн (математика)
В математике сплайн , — функция определяемая кусочно полиномами . это В интерполяции задачах сплайн-интерполяция часто предпочтительнее полиномиальной интерполяции , поскольку она дает аналогичные результаты даже при использовании полиномов низкой степени , избегая при этом явления Рунге для более высоких степеней.
В таких областях информатики , как автоматизированное проектирование и компьютерная графика , термин «сплайн» чаще относится к кусочно-полиномиальной ( параметрической ) кривой . Сплайны являются популярными кривыми в этих областях из-за простоты их конструкции, простоты и точности оценки, а также их способности аппроксимировать сложные формы посредством подбора кривой и интерактивного проектирования кривых.
Термин «сплайн» происходит от гибких сплайновых устройств, используемых судостроителями и чертежниками для рисования плавных форм.
Введение [ править ]
Термин «сплайн» используется для обозначения широкого класса функций, которые используются в приложениях, требующих интерполяции и/или сглаживания данных. Данные могут быть одномерными или многомерными. Сплайн-функции для интерполяции обычно определяются как минимизаторы подходящих показателей шероховатости (например, интегрального квадрата кривизны) с учетом ограничений интерполяции. Сглаживающие сплайны можно рассматривать как обобщение интерполяционных сплайнов, где функции определяются так, чтобы минимизировать взвешенную комбинацию среднеквадратической ошибки аппроксимации наблюдаемых данных и меры шероховатости. Для ряда содержательных определений меры шероховатости сплайн-функции оказываются конечномерными по своей природе, что является основной причиной их полезности в вычислениях и представлении. В оставшейся части этого раздела мы полностью сосредоточимся на одномерных полиномиальных сплайнах и используем термин «сплайн» в этом ограниченном смысле.
Определение [ править ]
Эта статья может сбивать с толку или быть непонятной читателям . ( февраль 2009 г. ) |
Мы начнем с ограничения нашего обсуждения полиномами от одной переменной . В данном случае сплайн представляет собой кусочно- полиномиальную функцию . Эта функция, назовем ее S , принимает значения из интервала [ a , b ] и отображает их в набор действительных чисел ,
На каждой из этих k «кусков» [ a , b ] полином, назовем его Pi . мы хотим определить
Данные k + 1 точек t i называются узлами . Вектор t = ( t 0 , …, t k ) называется вектором узла сплайна. Если узлы равномерно распределены на интервале [ a , b ], мы говорим, что сплайн равномерен , в противном случае мы говорим, что он неоднороден .
Если каждая из частей полинома P i имеет степень не выше n , то говорят, что сплайн имеет степень ≤ n (или порядок n + 1 ).
Если в окрестности точки t i , то сплайн называется гладким (по крайней мере) в t я . То есть в момент t i две части полинома P i –1 и Pi имеют общие значения производной от производной порядка 0 (значение функции) до производной порядка r i (другими словами, две соседние части полинома связаны с потерей гладкости не более n – r i )
Вектор r = ( r 1 , …, rk такой , –1 ) что сплайн имеет гладкость в момент t i для i = 1, …, k – 1 называется вектором гладкости сплайна.
Учитывая вектор узла t , степень n и вектор гладкости r для t , можно рассмотреть набор всех сплайнов степени ≤ n, имеющих вектор узла t и вектор гладкости r . Оснащенный операцией сложения двух функций (поточечное сложение) и взятия действительных кратных функций, этот набор становится реальным векторным пространством. Это сплайн-пространство обычно обозначается
При математическом изучении полиномиальных сплайнов вопрос о том, что происходит, когда два узла, скажем, и ti t i +1 , приближаются друг к другу и становятся совпадающими, имеет простой ответ. Кусочек полинома Pi t ( ) ) исчезает, а кусочки Pi − 1 ( t соединяются с и Pi + 1 ( t ) суммой потерь гладкости ti для и ti + 1 . То есть,
где t i повторяется j i раз для i = 1, …, k – 1 .
Параметрическая кривая на отрезке [ a , b ]
Примеры [ править ]
Предположим, что интервал [ a , b ] равен [0, 3] , а подинтервалы — [0, 1], [1, 2], [2, 3] . Предположим, что части полинома должны иметь степень 2, а части на [0, 1] и [1, 2] должны объединяться по значению и первой производной (при t = 1 ), а части на [1, 2] и [ 2, 3] объединяются просто по значению (при t = 2 ). Это определит тип сплайна S ( t ), для которого
будет членом этого типа, а также
был бы членом этого типа. (Примечание: хотя часть полинома 2 t не является квадратичной, результат по-прежнему называется квадратичным сплайном. Это показывает, что степень сплайна равна максимальной степени его полиномиальных частей.) Расширенный вектор узла для этого типа сплайна будет (0, 1, 2, 2, 3) .
Самый простой сплайн имеет степень 0. Его еще называют ступенчатой функцией . Следующий по простоте сплайн имеет степень 1. Его еще называют линейным сплайном . Замкнутый линейный сплайн (т. е. первый узел и последний совпадают) на плоскости — это просто многоугольник .
Обычным сплайном является натуральный кубический сплайн . Кубический сплайн имеет степень 3 с непрерывностью C. 2 , т.е. значения, а также первая и вторая производные непрерывны. Естественный означает, что вторые производные сплайн-полиномов равны нулю в конечных точках интервала интерполяции.
Таким образом, график сплайна представляет собой прямую линию вне отрезка, но все же гладкую.
Алгоритм вычисления натуральных кубических сплайнов [ править ]
Кубические сплайны имеют вид
Дан набор координат
Они должны удовлетворять:
Определим один кубический сплайн S как набор из 5 элементов ( a , b , c , d , x t ) , где a, b, c, d соответствуют коэффициентам в форме, показанной ранее, а x t равен x j .
Алгоритм расчета натуральных кубических сплайнов:
Входные данные: набор координат C , где | С | = п + 1
Выход: установить сплайны, состоящие из n пятёрок.
- Создайте новый массив a размером n + 1 и для i = 0,…, n установите
- Создайте новые массивы b и d , каждый размером n .
- Создайте новый массив h размера n и для i = 0,…, n – 1 установите
- Создайте новый массив α размера n и для i = 1,…, n – 1 установите
- Создайте новые массивы c, l, µ, z , каждый размером n + 1 .
- Набор
- Для i = 1, …, n – 1 задайте следующее:
- Набор
- Для j = n – 1, n – 2, …, 0 установите следующее:
- Создать новый набор
Splines
и назови этоoutput_set
. Заполните его n сплайнами S . - Для i = 0, …, n – 1 зададим следующее:
- Выход
output_set
Реализация С++:
#include <array>
template<int n>
std::array<std::array<float, 5>, n> natural_cubic_splines_impl(
const std::array<float, n + 1>& x,
const std::array<float, n + 1>& y)
{
std::array<float, n + 1> a;
for (int i = 0; i <= n; i++)
a[i] = y[i];
std::array<float, n> b, d, h;
for (int i = 0; i <= n - 1; i++)
h[i] = x[i + 1] - x[i];
std::array<float, n> alpha;
for (int i = 1; i <= n - 1; i++)
alpha[i] = 3.0f / h[i] * (a[i + 1] -
a[i]) - 3.0f / h[i - 1] * (a[i] - a[i - 1]);
std::array<float, n + 1> c, l, mu, z;
l[0] = 1, mu[0] = z[0] = 0;
for (int i = 1; i <= n - 1; i++)
{
l[i] = 2 * (x[i + 1] - x[i - 1]) - h[i - 1] * mu[i - 1];
mu[i] = h[i] / l[i];
z[i] = (alpha[i] - h[i - 1] * z[i - 1]) / l[i];
}
l[n] = 1, z[n] = c[n] = 0;
for (int j = n - 1; j >= 0; j--)
{
c[j] = z[j] - mu[j] * c[j + 1];
b[j] = (a[j + 1] - a[j]) / h[j] -
(h[j] * (c[j + 1] + 2 * c[j])) / 3.0f;
d[j] = (c[j + 1] - c[j]) / (3.0f * h[j]);
}
std::array<std::array<float, 5>, n> output_set;
for (int i = 0; i <= n - 1; i++)
{
output_set[i][0] = a[i];
output_set[i][1] = b[i];
output_set[i][2] = c[i];
output_set[i][3] = d[i];
output_set[i][4] = x[i];
}
return output_set;
}
Примечания [ править ]
Можно задаться вопросом, какое значение имеют более чем n кратных узлов в векторе узлов, поскольку это привело бы к такой непрерывности, как
Классический тип сплайна степени n, используемый в численном анализе, имеет непрерывность.
Другой тип сплайна, который широко используется в графике, например, в программах рисования, таких как Adobe Illustrator от Adobe Systems , имеет кубические части, но непрерывность сохраняется только в лучшем случае.
Многие системы автоматизированного проектирования, предназначенные для высококачественной графики и анимации, используют расширенные векторы узлов. например Autodesk Maya . Системы автоматизированного проектирования часто используют расширенную концепцию сплайна, известную как неоднородный рациональный B-сплайн (NURBS).
Если доступны выборочные данные из функции или физического объекта, сплайн-интерполяция — это подход к созданию сплайна, аппроксимирующего эти данные.
Общее выражение для C 2 интерполирующий кубический сплайн [ править ]
Общее выражение для i- го C 2 интерполяционный кубический сплайн в точке x с естественным условием можно найти по формуле
где
- – значения второй производной в i -м узле.
- – значения функции в i -м узле.
Представления и имена [ править ]
Для данного интервала [ a , b ] и данного расширенного вектора узла на этом интервале сплайны степени n образуют векторное пространство . Вкратце это означает, что добавление любых двух сплайнов данного типа дает сплайн этого заданного типа, а умножение сплайна данного типа на любую константу дает сплайн этого заданного типа. Размерность пространство, содержащее все сплайны определенного типа, можно отсчитать от расширенного вектора узла:
Если на тип сплайна наложены дополнительные линейные условия, то результирующий сплайн будет лежать в подпространстве. Например, пространство всех натуральных кубических сплайнов является подпространством пространства всех кубических C. 2 сплайны.
Сплайновая литература изобилует названиями специальных типов сплайнов. Эти имена были связаны с:
- Выбор, сделанный для представления сплайна, например:
- использование базовых функций для всего сплайна (что дало нам название B-splines )
- использование полиномов Бернштейна , использованных Пьером Безье для представления каждой части полинома (что дало нам название сплайны Безье )
- Выбор, сделанный при формировании расширенного вектора узла, например:
- использование одиночных узлов для C п –1 непрерывность и равномерное распределение этих узлов на [ a , b ] (что дает нам равномерные сплайны )
- использование узлов без ограничений на расстояние (что дает нам неравномерные сплайны )
- Любые особые условия, наложенные на сплайн, например:
- обеспечение нулевых вторых производных в точках a и b (что дает нам естественные сплайны )
- требуя, чтобы заданные значения данных находились на сплайне (что дает нам интерполирующие сплайны )
Часто для типа сплайна, удовлетворяющего двум или более основным пунктам выше, выбиралось специальное имя. Например, сплайн Эрмита — это сплайн, который выражается с использованием полиномов Эрмита для представления каждой отдельной части полинома. Чаще всего они используются с n = 3 ; то есть как сплайны Кубического Эрмита . В этой степени их можно дополнительно выбрать только касательно-непрерывными ( C 1 ); откуда следует, что все внутренние узлы двойные. Было изобретено несколько методов, позволяющих подогнать такие сплайны к заданным точкам данных; то есть превратить их в интерполирующие сплайны и сделать это путем оценки правдоподобных значений касательных там, где встречаются каждые две части полинома (что дает нам кардинальные сплайны , сплайны Катмулла-Рома и сплайны Кочанека-Бартельса , в зависимости от используемого метода).
Для каждого из представлений необходимо найти некоторые средства оценки, чтобы значения сплайна можно было создавать по требованию. Для тех представлений, которые выражают каждую отдельную часть Pi полинома ( t ) через некоторую основу для полиномов степени n , это концептуально просто:
- Для заданного значения аргумента t найдите интервал, в котором он лежит
- Найдите полиномиальный базис, выбранный для этого интервала.
- Найдите значение каждого базисного полинома в момент t :
- Найдите коэффициенты линейной комбинации тех базисных полиномов, которые дают сплайн на этом интервале c 0 , ..., c k –2.
- Сложите эту линейную комбинацию значений базового полинома, чтобы получить значение сплайна в точке t :
Однако для представления, которое определяет сплайн как линейную комбинацию базисных сплайнов, необходимо что-то более сложное. Алгоритм де Бура — эффективный метод оценки B-сплайнов .
История [ править ]
До того, как стали использоваться компьютеры, численные расчеты выполнялись вручную. кусочно-определенные функции, такие как знаковая функция или ступенчатая функция Хотя использовались , обычно предпочтение отдавалось полиномам, поскольку с ними было легче работать. С появлением компьютеров сплайны приобрели важное значение. Сначала они использовались в качестве замены полиномов при интерполяции, затем как инструмент для построения гладких и гибких фигур в компьютерной графике.
Принято считать, что первой математической ссылкой на сплайны является статья Шенберга 1946 года , которая, вероятно, является первым местом, где слово «сплайн» используется в связи с гладкой, кусочно-полиномиальной аппроксимацией. Однако корни этих идей лежат в авиационной и судостроительной промышленности. В предисловии к книге (Bartels et al., 1987) Робин Форрест описывает « лофтинг » — технику, использовавшуюся в британской авиационной промышленности во время Второй мировой войны для изготовления шаблонов самолетов путем пропускания тонких деревянных полосок (так называемых « сплайнов ») через точки. Выложенный на полу большого дизайнерского лофта, техника заимствована из дизайна корпуса корабля. В течение многих лет в практике проектирования кораблей использовались модели для проектирования небольших размеров. Успешный дизайн затем был нанесен на миллиметровую бумагу, а ключевые точки графика были повторно нанесены на миллиметровую бумагу большего размера до полного размера. Тонкие деревянные полоски интерполировали ключевые точки в плавные кривые. Полоски будут удерживаться на месте в отдельных точках (названных Форрестом «утками»; Шенберг использовал «собак» или «крыс»), а между этими точками будут принимать формы с минимальной энергией деформации. По словам Форреста, одним из возможных стимулов для создания математической модели этого процесса была потенциальная потеря критически важных компонентов конструкции всего самолета в случае попадания в чердак вражеской бомбы. Это привело к появлению «конического лофтинга», в котором конические секции использовались для моделирования положения кривой между утками. В начале 1960-х годов конический лофтинг был заменен тем, что мы бы назвали сплайнами, на основе работы Дж. К. Фергюсоном в Boeing и (несколько позже) М. А. Сабином в British Aircraft Corporation .
Слово «сплайн» изначально было словом на диалекте Восточной Англии .
Использование сплайнов для моделирования автомобильных кузовов, по-видимому, имеет несколько независимых истоков. Кредит заявлен от имени де Кастельжау в Citroën , Пьера Безье в Renault и Биркгофа , Гарабедяна и де Бура в General Motors (см. Birkhoff and de Boor, 1965), все за работу, выполненную в самом начале 1960-х или в конце 1950-х годов. По крайней мере, одна из статей де Кастельжо была опубликована, но не широко, в 1959 году. Работа Де Бура в General Motors привела к тому, что в начале 1960-х годов был опубликован ряд статей, включая некоторые фундаментальные работы по B-сплайнам .
Работа также велась в Pratt & Whitney Aircraft, где работали двое авторов (Ahlberg et al., 1967) — первой книги, посвященной сплайнам, а также в «Модельном бассейне Дэвида Тейлора » Федора Тейлхаймера. Работа в General Motors подробно описана в (Birkhoff, 1990) и (Young, 1997). Дэвис (1997) резюмирует часть этого материала.
Ссылки [ править ]
- Фергюсон, Джеймс С., Интерполяция кривой с несколькими переменными, J. ACM, vol. 11, нет. 2, стр. 221–228, апрель 1964 г.
- Альберг, Нильсон и Уолш, Теория сплайнов и их приложения, 1967.
- Биркгоф, Гидродинамика, расчеты реакторов и представление поверхности, в: Стив Нэш (ред.), История научных вычислений , 1990.
- Бартельс, Битти и Барски, Введение в сплайны для использования в компьютерной графике и геометрическом моделировании, 1987.
- Биркгоф и де Бур, Кусочно-полиномиальная интерполяция и аппроксимация, в: HL Garabedian (ред.), Proc. Симпозиум General Motors 1964 года, стр. 164–190. Эльзевир, Нью-Йорк и Амстердам, 1965 год.
- Дэвис, B-сплайны и геометрический дизайн , SIAM News, vol. 29, нет. 5, 1996.
- Эпперсон, История сплайнов , NA Digest, vol. 98, нет. 26, 1998.
- Стер и Булирш, Введение в численный анализ. Спрингер-Верлаг . п. 93-106. ISBN 0387904204
- Шёнберг, Вклад в проблему аппроксимации эквидистантных данных аналитическими функциями, Кварт. Прил. Матем., вып. 4, стр. 45–99 и 112–141, 1946.
- Янг, Гаррет Биркгоф и прикладная математика, Уведомления AMS, том. 44, нет. 11, стр. 1446–1449, 1997.
- Чапра, Канале, «Численные методы для инженеров», 5-е издание.
- Ларри, Шумейкер, «Сплайн-функции: вычислительные методы», SIAM, ISBN 978-1-611973-89-1, (2015).
Внешние ссылки [ править ]
Теория
- Интерактивное введение в сплайны , ibiblio.org
Функция Excel
Онлайн-утилиты
- Онлайн-утилита интерполяции кубическим сплайном
- Обучение посредством моделирования Интерактивное моделирование различных кубических сплайнов
- Симметричные сплайновые кривые , анимация Теодора Грея , The Wolfram Demonstrations Project , 2007.
Компьютерный код
- Примечания, PPT, Mathcad, Maple, Mathematica, Matlab , Институт целостных численных методов
- различные процедуры , NTCC
- Sisl: C-библиотека с открытым исходным кодом для NURBS , SINTEF
- Сплайн-интерполяция VBA , vbnumericalmethods.com