Открыть сервис

Сплайны

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

История

Первые упоминания о кусочно-полиномиальных функциях встречаются в работах математиков XVIII века, однако термин «сплайн» (от англ. spline — гибкая рейка, используемая чертёжниками для проведения плавных кривых) вошёл в употребление в середине XX века. В 1946 году американский математик Исаак Шенберг опубликовал фундаментальную работу «Contributions to the problem of approximation of equidistant data by analytic functions», в которой ввёл понятие B-сплайна (базисного сплайна). В 1960-е годы развитие вычислительной техники стимулировало активное применение сплайнов в задачах автоматизированного проектирования (CAD) и компьютерной анимации. В 1970-е годы Пьер Безье и другие исследователи разработали кубические сплайны, которые стали основой для кривых Безье и NURBS (неоднородных рациональных B-сплайнов). В СССР теория сплайнов развивалась в работах Ю. С. Завьялова, Б. П. Демидовича, И. А. Ованесяна и других.

Классификация

Сплайны классифицируют по нескольким признакам:

Устройство и математическое описание

Пусть задана сетка узлов \(x_0, x_1, \dots, x_n\) на отрезке \([a, b]\), причём \(x_0 = a\), \(x_n = b\). Сплайн \(S(x)\) степени \(k\) определяется как функция, которая на каждом подотрезке \([x_i, x_{i+1}]\) является многочленом степени не выше \(k\), а в узлах сетки выполнены условия непрерывности самой функции и её производных до порядка \(k-1\) (для гладких сплайнов). В общем случае \(S(x) \in C^{k-1}[a, b]\).

Кубический сплайн

Наиболее распространённым на практике является кубический сплайн (степень 3). На каждом интервале \([x_i, x_{i+1}]\) он имеет вид: \[ S_i(x) = a_i + b_i (x - x_i) + c_i (x - x_i)^2 + d_i (x - x_i)^3, \] где коэффициенты \(a_i, b_i, c_i, d_i\) определяются из условий:

Решение системы линейных уравнений для коэффициентов кубического сплайна обычно выполняется методом прогонки (трехдиагональная матрица). Трудоёмкость — \(O(n)\).

B-сплайн

B-сплайны (базисные сплайны) представляют собой базисные функции, линейная комбинация которых образует произвольный сплайн. Они обладают свойством минимального носителя: каждая B-сплайн функция отлична от нуля лишь на небольшом числе соседних интервалов. Это свойство делает B-сплайны удобными для локальной правки кривых. Порядок \(p\) B-сплайна связан со степенью \(k = p-1\). Рекуррентное определение B-сплайна (алгоритм Кокса — де Бура): \[ B_{i,0}(x) = \begin{cases} 1, & x \in [t_i, t_{i+1}), \\ 0, & \text{иначе}, \end{cases} \] \[ B_{i,p}(x) = \frac{x - t_i}{t_{i+p} - t_i} B_{i,p-1}(x) + \frac{t_{i+p+1} - x}{t_{i+p+1} - t_{i+1}} B_{i+1,p-1}(x), \] где \(t_i\) — узлы вектора (knots).

NURBS

NURBS (Non-Uniform Rational B-Spline) — неоднородные рациональные B-сплайны, представляющие собой отношение двух B-сплайнов с весовыми коэффициентами. Позволяют точно описывать конические сечения (окружности, эллипсы, параболы, гиперболы) и используются в системах CAD/CAE, например, в SolidWorks, CATIA, AutoCAD.

Применение

Компьютерная графика и анимация

Сплайны широко применяются для построения гладких кривых и поверхностей в трёхмерной графике. В частности, кривые Безье и B-сплайны являются основой векторных форматов (SVG, TrueType шрифты) и систем компьютерного моделирования. В анимации сплайны задают траектории движения объектов; интерполяция ключевых кадров часто выполняется с помощью кубических сплайнов (например, в формате Bezier curves в Adobe After Effects).

Численный анализ

Автоматизированное проектирование (CAD)

Большинство современных CAD-систем (CATIA, Siemens NX, SolidWorks) используют NURBS для описания сложных поверхностей (кузовы автомобилей, корпуса самолётов, лопатки турбин). Сплайны позволяют инженерам локально редактировать форму, изменяя положение контрольных точек или весов.

Статистика и эконометрика

Сплайны применяются в регрессионном анализе для непараметрического моделирования зависимостей: используются сплайновые регрессии (например, B-сплайны или кубические сплайны с линейным штрафом в GAM — обобщённых аддитивных моделях).

Обработка изображений и сигналов

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

Примеры

  1. Линейный сплайн — кусочно-линейная функция (ломаная). Простейший случай, обеспечивает непрерывность C⁰. Используется, например, в бинарной классификации (фильтр Калмана с кусочно-линейной моделью).
  2. Естественный кубический сплайн — самый распространённый интерполяционный сплайн. Пример: восстановление формы профиля лопатки по таблице замеров.
  3. Сплайновая кривая в 3D-редакторе Blender: создание пути анимации камеры с помощью управляющих точек и ручек Безье.

Критика и ограничения

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →