stringtranslate.com

Сплайн (математика)

Одиночные узлы на 1/3 и 2/3 образуют сплайн из трех кубических полиномов, встречающихся с параметрической непрерывностью C 2 . Тройные узлы на обоих концах интервала гарантируют, что кривая интерполирует конечные точки.

В математике сплайн — это функция , определяемая кусочно полиномами . В задачах интерполяции сплайн-интерполяция часто предпочтительнее полиномиальной интерполяции , поскольку она дает аналогичные результаты даже при использовании полиномов низкой степени , избегая при этом явления Рунге для более высоких степеней.

В таких областях информатики , как автоматизированное проектирование и компьютерная графика , термин «сплайн» чаще относится к кусочно-полиномиальной ( параметрической ) кривой . Сплайны являются популярными кривыми в этих областях из-за простоты их конструкции, простоты и точности оценки, а также их способности аппроксимировать сложные формы посредством подбора кривой и интерактивного проектирования кривых.

Термин «сплайн» происходит от гибких сплайновых устройств, используемых судостроителями и чертежниками для рисования плавных форм.

Введение

Термин «сплайн» используется для обозначения широкого класса функций, которые используются в приложениях, требующих интерполяции и/или сглаживания данных. Данные могут быть одномерными или многомерными. Сплайн-функции для интерполяции обычно определяются как минимизаторы подходящих показателей шероховатости (например, интегрального квадрата кривизны) с учетом ограничений интерполяции. Сглаживающие сплайны можно рассматривать как обобщение интерполяционных сплайнов, где функции определяются так, чтобы минимизировать взвешенную комбинацию среднеквадратической ошибки аппроксимации наблюдаемых данных и меры шероховатости. Для ряда содержательных определений меры шероховатости сплайн-функции оказываются конечномерными по своей природе, что является основной причиной их полезности в вычислениях и представлении. В оставшейся части этого раздела мы полностью сосредоточимся на одномерных полиномиальных сплайнах и используем термин «сплайн» в этом ограниченном смысле.

Определение

Мы начнем с ограничения нашего обсуждения полиномами от одной переменной . В данном случае сплайн представляет собой кусочно- полиномиальную функцию . Эта функция, назовем ее S , принимает значения из интервала [ a , b ] и сопоставляет их с набором действительных чисел .

S[ a , b ]kнепересекающимися

На каждой из этих k «кусков» [ a , b ] мы хотим определить полином, назовем его Pi .

i-[ a , b ]как Pi ,

Данные 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 и Pi имеют общие значения производной от производной порядка 0 (значение функции) до производной порядка r i (другими словами, две соседние части полинома связаны с потерей гладкости не более nr i )

Вектор r = ( r 1 , …, rk –1 ) такой , что сплайн имеет гладкость в момент t i для i = 1, …, k – 1 , называется вектором гладкости сплайна.

Учитывая вектор узла t , степень n и вектор гладкости r для t , можно рассмотреть набор всех сплайнов степени n , имеющих вектор узла t и вектор гладкости r . Оснащенный операцией сложения двух функций (поточечное сложение) и взятия действительных кратных функций, этот набор становится реальным векторным пространством. Это сплайн-пространство обычно обозначается

При математическом изучении полиномиальных сплайнов вопрос о том, что происходит, когда два узла, скажем, ti и t i +1 , приближаются друг к другу и становятся совпадающими, имеет простой ответ. Кусок полинома P i ( t ) исчезает, а кусочки P i −1 ( t ) и Pi +1 ( t ) соединяются с суммой потерь гладкости для t i и t i +1 . То есть,

j я знак равно пр янескольких узлов,nрасширенным

где t i повторяется j i раз для i = 1, …, k – 1 .

Параметрическая кривая на отрезке [ a , b ]

сплайновой кривой,XY

Примеры

Предположим, что интервал [ 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 , т.е. значения, а также первая и вторая производные непрерывны. Естественный означает, что вторые производные сплайн-полиномов равны нулю в конечных точках интервала интерполяции.

Таким образом, график сплайна представляет собой прямую линию вне отрезка, но все же гладкую.

Алгоритм вычисления натуральных кубических сплайнов

Кубические сплайны имеют вид

Дан набор координат

nS i ( x )i = 0, …, n – 1

Они должны удовлетворять:

Определим один кубический сплайн S как набор из 5 элементов ( a , b , c , d , x t ) , где a, b, c, d соответствуют коэффициентам в форме, показанной ранее, а x t равен x j .

Алгоритм вычисления натуральных кубических сплайнов:
Входные данные: набор координат C , с | С | = n + 1
Выход: установить сплайны, состоящие из n пятёрок.

  1. Создайте новый массив a размером n + 1 и для i = 0,…, n установите
  2. Создайте новые массивы b и d , каждый размером n .
  3. Создайте новый массив h размера n и для i = 0,…, n – 1 установите
  4. Создайте новый массив α размера n и для i = 1,…, n – 1 установите
  5. Создайте новые массивы c, l, µ, z , каждый размером n + 1 .
  6. Набор
  7. Для i = 1, …, n – 1 зададим следующее:
  8. Набор
  9. Для j = n – 1, n – 2, …, 0 установите следующее:
  10. Создайте новый набор Splinesи назовите его output_set. Заполните его n сплайнами S .
  11. Для i = 0, …, n – 1 зададим следующее:
  12. Выходoutput_set

Реализация С++:

#include <массив> шаблон < интервал 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 :: массив < float , n + 1 > a ;    для ( int я = 0 ; я <= n ; я ++ )        а [ я ] = у [ я ];  std :: массив < float , n > b , d , h ;    для ( int я = 0 ; я <= n - 1 ; я ++ )          час [ я ] = Икс [ я + 1 ] - Икс [ я ];      std :: array < float , n > alpha ;  для ( int я = 1 ; я <= n - 1 ; я ++ )          альфа [ я ] = 3,0f / ч [ я ] * ( а [ я + 1 ] -          а [ i ]) 3,0ф / ч [ i 1 ] * ( a [ i ] a [ i 1 ]);            std :: массив < float , n + 1 > c , l , mu , z ;       л [ 0 ] знак равно 1 , мю [ 0 ] знак равно z [ 0 ] знак равно 0 ;       для ( int я = 1 ; я <= n - 1 ; я ++ )          {л [ я ] = 2 * ( х [ я + 1 ] - х [ я - 1 ]) - ч [ я - 1 ] * мю [ я - 1 ];                  му [ я ] = час [ я ] / л [ я ];    z [ я ] = ( альфа [ я ] - час [ я - 1 ] * z [ я - 1 ]) / л [ я ];            }л [ п ] знак равно 1 , z [ п ] знак равно c [ п ] знак равно 0 ;       for ( int j знак равно n - 1 ; j >= 0 ; j -- )          {c [ j ] = z [ j ] - мю [ j ] * c [ j + 1 ];        б [ j ] = ( а [ j + 1 ] - а [ j ]) / час [ j ] -          ( ч [ 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 ;   для ( int я = 0 ; я <= n - 1 ; я ++ )          {выходной_набор [ я ] [ 0 ] = а [ я ];  выходной_набор [ я ] [ 1 ] = б [ я ];  выходной_набор [ я ] [ 2 ] = c [ я ];  выходной_набор [ я ] [ 3 ] = d [ я ];  выходной_набор [ я ] [ 4 ] = х [ я ];  }вернуть выходной_набор ; }

Примечания

Можно задаться вопросом, какое значение имеют более чем n кратных узлов в векторе узла, поскольку это привело бы к такой непрерывности, как

tin + 1 раз в расширенном векторе узла, все его экземпляры ,( n + 1)n + 1n + 2n + 3

Классический тип сплайна степени n , используемый в численном анализе, имеет непрерывность.

n - 1плоский сплайн,n = 3C 2ab

Другой тип сплайна, который широко используется в графике, например, в программах для рисования, таких как Adobe Illustrator от Adobe Systems , имеет кубические части, но непрерывность сохраняется только в лучшем случае.

PostScript

Многие системы автоматизированного проектирования, предназначенные для высококачественной графики и анимации, используют расширенные векторы узлов, например Autodesk Maya . Системы автоматизированного проектирования часто используют расширенную концепцию сплайна, известную как неоднородный рациональный B-сплайн (NURBS).

Если доступны выборочные данные из функции или физического объекта, сплайн-интерполяция — это подход к созданию сплайна, аппроксимирующего эти данные.

Общее выражение для интерполяционного кубического сплайна C 2

Общее выражение для i -го интерполяционного кубического сплайна C 2 в точке x с естественным условием можно найти по формуле

где

Представления и имена

Для данного интервала [ a , b ] и данного расширенного вектора узла на этом интервале сплайны степени n образуют векторное пространство . Вкратце это означает, что добавление любых двух сплайнов данного типа дает сплайн этого заданного типа, а умножение сплайна данного типа на любую константу дает сплайн этого заданного типа. Размерность пространства, содержащего все сплайны определенного типа, можно посчитать из расширенного вектора узла :

Если на тип сплайна наложены дополнительные линейные условия, то результирующий сплайн будет лежать в подпространстве. Например, пространство всех натуральных кубических сплайнов является подпространством пространства всех кубических сплайнов C2 .

Сплайновая литература изобилует названиями специальных типов сплайнов. Эти имена были связаны с:

Часто для типа сплайна, удовлетворяющего двум или более основным пунктам выше, выбиралось специальное имя. Например, сплайн Эрмита — это сплайн, который выражается с использованием полиномов Эрмита для представления каждой отдельной части полинома. Чаще всего они используются с n = 3 ; то есть как сплайны Кубического Эрмита . В этой степени их можно дополнительно выбрать только касательно-непрерывными ( C 1 ); откуда следует, что все внутренние узлы двойные. Было изобретено несколько методов, позволяющих подогнать такие сплайны к заданным точкам данных; то есть превратить их в интерполирующие сплайны и сделать это путем оценки правдоподобных значений касательных там, где встречаются каждые две части полинома (что дает нам кардинальные сплайны , сплайны Катмулла-Рома и сплайны Кочанека-Бартеля , в зависимости от используемого метода).

Для каждого из представлений необходимо найти некоторые средства оценки, чтобы значения сплайна можно было создавать по требованию. Для тех представлений, которые выражают каждую отдельную часть полинома Pi ( t ) в терминах некоторой основы для полиномов степени n , это концептуально просто:

алгоритма Де Кастельжокривых Безьесплайнах Безье

Однако для представления, которое определяет сплайн как линейную комбинацию базисных сплайнов, необходимо что-то более сложное. Алгоритм де Бура — эффективный метод оценки 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) резюмирует часть этого материала.

Рекомендации

Внешние ссылки

Теория

Функция Excel

Онлайн-утилиты

Компьютерный код