Документация Engee

spline

Интерполяция данных кубическим сплайном.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • s = spline(x, y, xq) — возвращает вектор интерполированных значений s, соответствующих точкам запроса в xq. Значения s определяются кубической сплайн-интерполяцией x и y.

  • pp = spline(x, y) — возвращает кусочно-полиномиальную структуру.

Аргументы

Входные аргументы

# x — координаты x
вектор

Details

Координаты x, заданные как вектор. Вектор x определяет точки, в которых заданы данные y. Элементы x должны быть уникальными.

Кубическая сплайн-интерполяция требует не менее 4 точек. При наличии 2 или 3 точек применяется линейная или квадратичная интерполяция соответственно.

Типы данных

Float32, Float64

# y — значение функции при заданных координатах x
вектор | матрица | массив

Details

Значения функции в координатах x, заданные как числовой вектор, матрица или массив. Аргументы x и y обычно имеют одинаковую длину, но y также может иметь ровно на два элемента больше, чем x, для задания конечных наклонов.

Если y — матрица или массив, то значения в последнем измерении, y(:,…​,:,j), берутся в качестве значений для сопоставления с x. В этом случае последнее измерение y должно иметь ту же длину, что и x, или иметь ровно на два элемента больше.

Конечные наклоны кубического сплайна подчиняются следующим правилам:

  • Если x и y — векторы одинакового размера, то используются условия «не узел».

  • Если x или y — скаляр, то он расширяется до той же длины, что и другой, и используются условия «не узел».

  • Если y — вектор, содержащий на два элемента больше значений, чем x, то сплайн использует первое и последнее значения в y в качестве конечных наклонов кубического сплайна. Например, если y — вектор, то:

    • y(2:end-1) возвращает значения функции в каждой точке x;

    • y(1) возвращает наклон в начале интервала, расположенного в точке min(x);

    • y(end) возвращает наклон в конце интервала, расположенного в точке max(x).

  • Аналогично, если y — матрица или -мерный массив с размером size(y,N), равным length(x)+2, то:

    • y(:,…​,:,j+1) возвращает значения функции в каждой точке x для j = 1:length(x);

    • y(:,:,…​:,1) возвращает наклоны в начале интервалов, расположенных в точке min(x);

    • y(:,:,…​:,end) возвращает наклоны в конце интервалов, расположенных в точке max(x).

Типы данных

Float32, Float64

# xq — точки запроса
скаляр | вектор | матрица | массив

Details

Точки запроса, заданные как скаляр, вектор, матрица или массив. Точки, заданные в xq, представляют собой координаты x интерполированных значений функции yq, вычисленных с помощью сплайна.

Типы данных

Float32, Float64

Выходные аргументы

# s — интерполированные значения в точках запроса
скаляр | вектор | матрица | массив

Details

Интерполированные значения в точках запроса, возвращаемые в виде скаляра, вектора, матрицы или массива.

Размер s связан с размерами y и xq:

  • Если y — вектор, то s имеет тот же размер, что и xq.

  • Если y — массив размером Ny = size(y), то применяются следующие условия:

    • Если xq — скаляр или вектор, то size(s) возвращает [Ny(1:end-1) length(xq)];

    • Если xq — массив, то size(s) возвращает [Ny(1:end-1) size(xq)].

# pp — кусочный полином
структура

Details

Кусочный полином, возвращаемый в виде структуры. Структура содержит поля, приведенные в таблице.

Поле Описание

form

pp для кусочного полинома

breaks

Вектор длины со строго возрастающими элементами, представляющими начало и конец каждого из интервалов

coefs

Матрица размером на , в которой каждая строка coefs(i,:) содержит локальные коэффициенты полинома порядка на -м интервале, [breaks(i),breaks(i+1)]

pieces

Количество частей

order

Степень полиномов

dim

Размерность цели

Поскольку коэффициенты полиномов в coefs являются локальными коэффициентами для каждого интервала, необходимо вычесть нижнюю границу соответствующего интервала узла, чтобы использовать коэффициенты в обычном полиномиальном уравнении. Другими словами, для коэффициентов на интервале соответствующий полином равен:

Примеры

Сплайн-интерполяция синусоидальных данных

Details

Используем spline для интерполяции синусоидальной кривой по неравномерно расположенным точкам выборки.

import EngeeDSP.Functions: spline
x = [0, 1, 2.5, 3.6, 5, 7, 8.1, 10]
y = sin.(x)
xx = 0:0.25:10
yy = spline(x, y, xx)

plot(x, y, seriestype=:scatter, markersize=6, legend=false)
plot!(xx, yy, linewidth=2, legend=false)

spline 1

Советы

Сплайн-интерполяцию также можно выполнить с помощью функции interp1 с помощью команды interp1(x,y,xq,"spline"). Функция spline выполняет интерполяцию по строкам входной матрицы, а функция interp1 — по столбцам входной матрицы.

Алгоритмы

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

Литература

  1. de Boor, Carl. A Practical Guide to Splines. Springer-Verlag, New York: 1978.