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

pchip

Кусочно-кубический интерполяционный многочлен Эрмита (Piecewise Cubic Hermite Interpolating Polynomial, PCHIP).

Библиотека

EngeeDSP

Синтаксис

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

Аргументы

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

# x — точки выборки
вектор

Details

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

Типы данных

Float32, Float64

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

Details

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

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

Типы данных

Float32, Float64

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

Details

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

Типы данных

Float32, Float64

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

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

Details

Интерполированные значения в точках запроса, возвращаемые в виде скаляра, вектора, матрицы или массива. Размер аргумента p связан с размерами аргументов y и xq:

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

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

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

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

Примеры

Интерполяция данных с помощью spline и pchip

Details

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

Сравним результаты интерполяции на выборочных данных, соединяющих плоские области. Создадим векторы значений x, значений функций в этих точках y и точек запроса xq. Вычислим интерполяции в точках запроса, используя функции spline и pchip. Построим график интерполированных значений функций в точках запроса для сравнения.

import EngeeDSP.Functions: pchip, spline

x = -3:3
y = [-1, -1, -1, 0, 1, 1, 1]
xq1 = -3:0.01:3

p = pchip(x, y, xq1)
s = spline(x, y, xq1)

plot(x, y,
     seriestype = :scatter,
     markercolor = :white,
     label = "Sample Points",
     legend = :bottomright)
plot!(xq1, p, label = "pchip")
plot!(xq1, s, linestyle = :dashdot, label = "spline")

pchip 1

В данном случае функция pchip избегает выбросы и может точно соединять плоские области.

Выполним второе сравнение, используя функцию колебаний выборки.

import EngeeDSP.Functions: pchip, spline, besselj

x = 0:15
y = besselj.(1, x)
xq2 = 0:0.01:15

p = pchip(x, y, xq2)
s = spline(x, y, xq2)

plot(x, y,
     seriestype = :scatter,
     markercolor = :white,
     label = "Sample Points")
plot!(xq2, p, label = "pchip")
plot!(xq2, s, linestyle = :dashdot, label = "spline")

pchip 1 2

Если базовая функция является колебательной, spline лучше улавливает движение между точками, чем pchip, которая сильно сглаживается вблизи локальных экстремумов.

Дополнительно

Сохраняющая форму кусочно-кубическая интерполяция

Details

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

  • На каждом подынтервале многочлен является кубическим интерполяционным многочленом Эрмита для заданных точек данных с заданными производными (наклонами) в точках интерполяции.

  • интерполирует , то есть , и первая производная непрерывна. Вторая производная , вероятно, не непрерывна, поэтому возможны скачки в точке .

  • Кубический интерполянт сохраняет форму. Наклоны в точке выбираются таким образом, чтобы сохранял форму данных и монотонность. Следовательно, на интервалах, где данные монотонны, также монотонен, и в точках, где данные имеют локальный экстремум, также монотонен.

Если — матрица, удовлетворяет этим свойствам для каждой строки .

Советы

Функция spline строит почти так же, как функция pchip строит . Однако spline выбирает наклоны в точке по-другому, а именно, чтобы сделать непрерывным. Это различие имеет несколько эффектов:

  • spline позволяет получить более плавный результат, то есть непрерывен.

  • spline дает более точный результат, если данные состоят из значений гладкой функции.

  • pchip не имеет выбросов и меньших колебаний, если данные не гладкие.

  • pchip менее затратна в настройке.

  • Оценка обоих вариантов одинаково затратна.

Литература

  1. Fritsch, F. N. and R. E. Carlson. «Monotone Piecewise Cubic Interpolation.» SIAM Journal on Numerical Analysis. Vol. 17, 1980, pp.238–246.

  2. Kahaner, David, Cleve Moler, Stephen Nash. Numerical Methods and Software. Upper Saddle River, NJ: Prentice Hall, 1988.