В математике сплайн — это функция , кусочно определяемая полиномами . В задачах интерполяции сплайн - интерполяция часто предпочтительнее полиномиальной интерполяции , поскольку она дает схожие результаты даже при использовании полиномов низкой степени , избегая при этом явления Рунге для более высоких степеней.
В подотраслях компьютерных наук , таких как автоматизированное проектирование и компьютерная графика , термин сплайн чаще всего относится к кусочно-полиномиальной ( параметрической ) кривой . Сплайны являются популярными кривыми в этих подотраслях из-за простоты их построения, легкости и точности оценки, а также их способности аппроксимировать сложные формы посредством подгонки кривой и интерактивного проектирования кривой.
Термин «сплайн» происходит от гибких шлицевых устройств, используемых судостроителями и чертежниками для рисования плавных форм.
Термин «сплайн» используется для обозначения широкого класса функций, которые используются в приложениях, требующих интерполяции данных и/или сглаживания. Данные могут быть как одномерными, так и многомерными. Сплайновые функции для интерполяции обычно определяются как минимизаторы подходящих мер шероховатости (например, интегральной квадратичной кривизны) с учетом ограничений интерполяции. Сглаживающие сплайны можно рассматривать как обобщения интерполяционных сплайнов, где функции определяются для минимизации взвешенной комбинации среднеквадратичной ошибки аппроксимации по наблюдаемым данным и меры шероховатости. Для ряда содержательных определений меры шероховатости функции сплайна оказываются конечномерными по своей природе, что является основной причиной их полезности в вычислениях и представлении. В оставшейся части этого раздела мы полностью сосредоточимся на одномерных полиномиальных сплайнах и используем термин «сплайн» в этом ограниченном смысле.
По словам Джеральда Фарина, B-сплайны были исследованы еще в девятнадцатом веке Николаем Лобачевским в Казанском университете в России. [1]
До появления компьютеров численные вычисления выполнялись вручную. Хотя использовались кусочно-определенные функции, такие как знаковая функция или ступенчатая функция , полиномы, как правило, были предпочтительнее, поскольку с ними было проще работать. С появлением компьютеров сплайны приобрели важность. Сначала они использовались в качестве замены полиномов при интерполяции, затем как инструмент для построения плавных и гибких форм в компьютерной графике.
Принято считать, что первой математической ссылкой на сплайны является статья Шёнберга 1946 года , которая, вероятно, является первым местом, где слово «сплайн» используется в связи с гладкой, кусочно-полиномиальной аппроксимацией. Однако эти идеи имеют свои корни в авиационной и судостроительной промышленности. В предисловии к (Bartels et al., 1987) Робин Форрест описывает « лофтинг », метод, используемый в британской авиационной промышленности во время Второй мировой войны для создания шаблонов для самолетов путем пропускания тонких деревянных полос (называемых « сплайнами ») через точки, разложенные на полу большого конструкторского чердака, метод, заимствованный из проектирования корпусов кораблей. В течение многих лет практика проектирования кораблей использовала модели для проектирования в малых размерах. Затем успешный проект был нанесен на миллиметровую бумагу, а ключевые точки графика были повторно нанесены на большую миллиметровую бумагу до полного размера. Тонкие деревянные полоски обеспечивали интерполяцию ключевых точек в плавные кривые. Полоски будут удерживаться на месте в дискретных точках (называемых Форрестом «утками»; Шенберг использовал «собак» или «крыс») и между этими точками будут принимать формы с минимальной энергией деформации. По словам Форреста, одним из возможных стимулов для математической модели этого процесса была потенциальная потеря критических компонентов конструкции для всего самолета, если чердак будет поражен вражеской бомбой. Это привело к «коническому лофтингу», который использовал конические сечения для моделирования положения кривой между утками. Коническое лофтинг было заменено тем, что мы называем сплайнами, в начале 1960-х годов на основе работы Дж. К. Фергюсона в Boeing и (несколько позже) М. А. Сабина в British Aircraft Corporation .
Слово «spline» изначально было диалектным словом Восточной Англии .
Использование сплайнов для моделирования автомобильных кузовов, по-видимому, имеет несколько независимых начал. Заслуги заявлены от имени де Кастельжо в Citroën , Пьера Безье в Renault и Биркхофа , Гарабедяна и де Бура в General Motors (см. Биркхофф и де Бур, 1965), все за работу, выполненную в самом начале 1960-х или в конце 1950-х годов. По крайней мере одна из статей де Кастельжо была опубликована, но не широко, в 1959 году. Работа Де Бура в General Motors привела к публикации ряда статей в начале 1960-х годов, включая некоторые из фундаментальных работ по B-сплайнам .
Работа также велась в Pratt & Whitney Aircraft, где были задействованы два автора (Ahlberg et al., 1967) — первой книги, посвященной сплайнам, — и David Taylor Model Basin , автором которой был Федор Тейлхаймер. Работа в General Motors подробно описана в (Birkhoff, 1990) и (Young, 1997). Дэвис (1997) суммирует часть этого материала.
Начнем с ограничения нашего обсуждения полиномами от одной переменной . В этом случае сплайн — это кусочно- полиномиальная функция . Эта функция, назовем ее S , принимает значения из интервала [ a , b ] и отображает их в множество действительных чисел . Мы хотим , чтобы S была кусочно-определенной. Чтобы добиться этого, пусть интервал [ a , b ] будет покрыт k упорядоченными, непересекающимися подынтервалами,
На каждом из этих k " кусков" [ a , b ] мы хотим определить многочлен, назовем его P i . На i -м подинтервале [ a , b ] S определяется P i ,
Данные k + 1 точек t i называются узлами . Вектор t = ( t 0 , …, t k ) называется вектором узла для сплайна. Если узлы равномерно распределены в интервале [ a , b ], мы говорим, что сплайн равномерный , в противном случае мы говорим, что он неравномерный .
Если каждая из частей полинома P i имеет степень не более n , то говорят, что сплайн имеет степень ≤ n (или порядок n + 1 ).
Если в окрестности t i , то говорят, что сплайн имеет гладкость (по крайней мере) в t i . То есть, в t i два полиномиальных фрагмента P i –1 и P i имеют общие производные значения от производной порядка 0 (значение функции) до производной порядка r i (другими словами, два соседних полиномиальных фрагмента соединяются с потерей гладкости не более n – r i )
Вектор r = ( r 1 , …, r k –1 ) такой, что сплайн имеет гладкость в момент времени t i для i = 1, …, k – 1, называется вектором гладкости сплайна.
При наличии вектора узла t , степени n и вектора гладкости r для t можно рассмотреть множество всех сплайнов степени ≤ n, имеющих вектор узла t и вектор гладкости r . Оснащенный операцией сложения двух функций (поточечное сложение) и взятия действительных кратных функций, этот набор становится действительным векторным пространством. Это пространство сплайнов обычно обозначается как
В математическом исследовании полиномиальных сплайнов вопрос о том, что происходит, когда два узла, скажем, t i и t i +1 , приближаются друг к другу и становятся совпадающими, имеет простой ответ. Полиномиальная часть P i ( t ) исчезает, а части P i −1 ( t ) и P i +1 ( t ) объединяются с суммой потерь гладкости для t i и t i +1 . То есть, где j i = n – r i . Это приводит к более общему пониманию вектора узла. Потеря непрерывности в любой точке может рассматриваться как результат нескольких узлов, расположенных в этой точке, и тип сплайна может быть полностью охарактеризован его степенью n и его расширенным вектором узла
где t i повторяется j i раз для i = 1, …, k – 1 .
Параметрическая кривая на интервале [ a , b ] является сплайновой кривой, если обе функции X и Y являются сплайновыми функциями одинаковой степени с одинаковыми расширенными векторами узлов на этом интервале.
Предположим, что интервал [ 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 , т.е. значения и первой и второй производных непрерывны. Натуральный означает, что вторые производные полиномов сплайна равны нулю в конечных точках интервала интерполяции.
Таким образом, график сплайна представляет собой прямую линию вне интервала, но по-прежнему гладкую.
Кубические сплайны имеют вид
Задав набор координат, мы хотим найти набор из n сплайнов S i ( x ) для i = 0, …, n – 1 .
Они должны удовлетворять:
Определим один кубический сплайн S как пятерку ( a , b , c , d , xt ) , где a , b, c, d соответствуют коэффициентам в форме, показанной ранее , а xt равен xj .
Алгоритм вычисления натуральных кубических сплайнов:
Вход: набор координат C , где | C | = n + 1
Выход: набор сплайнов, состоящий из n кортежей по 5.
Splines
и назовите его output_set
. Заполните его n сплайнами S .output_set
Можно спросить, какой смысл имеют более n множественных узлов в векторе узла, поскольку это привело бы к непрерывностям, как в месте этой высокой кратности. По соглашению, любая такая ситуация указывает на простой разрыв между двумя соседними полиномиальными частями. Это означает, что если узел t i появляется более n + 1 раз в расширенном векторе узла, все его экземпляры сверх ( n + 1) -го могут быть удалены без изменения характера сплайна, поскольку все кратности n + 1 , n + 2 , n + 3 и т. д. имеют одно и то же значение. Обычно предполагается, что любой вектор узла, определяющий любой тип сплайна, был отбракован таким образом.
Классический тип сплайна степени n, используемый в численном анализе, обладает непрерывностью , что означает, что каждые две смежные полиномиальные части сходятся по своему значению и первым n − 1 производным в каждом узле. Математический сплайн, который наиболее точно моделирует плоский сплайн, — это кубический ( n = 3 ), дважды непрерывно дифференцируемый ( C 2 ), натуральный сплайн, который является сплайном этого классического типа с дополнительными условиями, наложенными на конечные точки a и b .
Другой тип сплайна, который часто используется в графике, например, в программах для рисования, таких как Adobe Illustrator от Adobe Systems , имеет части, которые являются кубическими, но имеют непрерывность только в лучшем случае. Этот тип сплайна также используется в PostScript, а также в определении некоторых компьютерных типографских шрифтов.
Многие системы автоматизированного проектирования, предназначенные для высококачественной графики и анимации, используют расширенные векторы узлов, например Autodesk Maya . Системы автоматизированного проектирования часто используют расширенную концепцию сплайна, известную как неравномерный рациональный B-сплайн (NURBS).
Если доступны выборочные данные из функции или физического объекта, сплайн-интерполяция представляет собой подход к созданию сплайна, который аппроксимирует эти данные.
Общее выражение для i -го C2 - интерполяционного кубического сплайна в точке x с естественным состоянием можно найти с помощью формулы
где
Для заданного интервала [ a , b ] и заданного расширенного вектора узла на этом интервале сплайны степени n образуют векторное пространство . Вкратце это означает, что сложение любых двух сплайнов заданного типа дает сплайн данного типа, а умножение сплайна заданного типа на любую константу дает сплайн данного типа. Размерность пространства , содержащего все сплайны определенного типа, можно подсчитать из расширенного вектора узла:
Размерность равна сумме степени плюс кратности
Если на тип сплайна наложены дополнительные линейные условия, то полученный сплайн будет лежать в подпространстве. Пространство всех натуральных кубических сплайнов, например, является подпространством пространства всех кубических сплайнов C2 .
Литература по сплайнам изобилует названиями специальных типов сплайнов. Эти названия связаны с:
Часто для типа сплайна, удовлетворяющего двум или более основным пунктам выше, выбиралось специальное название. Например, сплайн Эрмита — это сплайн, который выражается с помощью полиномов Эрмита для представления каждой из отдельных частей полинома. Чаще всего они используются с n = 3 ; то есть как кубические сплайны Эрмита . В этой степени они могут быть дополнительно выбраны только касательно-непрерывными ( C 1 ); что подразумевает, что все внутренние узлы являются двойными. Было изобретено несколько методов для подгонки таких сплайнов к заданным точкам данных; то есть, чтобы превратить их в интерполяционные сплайны и сделать это путем оценки правдоподобных значений касательных, где встречаются каждые две части полинома (давая нам кардинальные сплайны , сплайны Катмулла-Рома и сплайны Коханека-Бартельса , в зависимости от используемого метода).
Для каждого из представлений должны быть найдены некоторые средства оценки, чтобы значения сплайна могли быть получены по требованию. Для тех представлений, которые выражают каждую отдельную часть полинома P i ( t ) в терминах некоторого базиса для полиномов степени n , это концептуально просто:
Однако этапы оценки и суммирования часто комбинируются хитрым образом. Например, полиномы Бернштейна являются основой для полиномов, которые можно эффективно оценивать в линейных комбинациях с использованием специальных рекуррентных соотношений. Это суть алгоритма Де Кастельжау , который представлен в кривых Безье и сплайнах Безье .
Однако для представления, определяющего сплайн как линейную комбинацию базисных сплайнов, требуется что-то более сложное. Алгоритм де Бура является эффективным методом оценки B-сплайнов .
Теория
Функция Excel
Онлайн-утилиты
Компьютерный код