pchip

Кусочный кубический эрмитов интерполяционный многочлен (PCHIP)

Синтаксис

p = pchip(x,y,xq)
pp = pchip(x,y)

Описание

пример

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

пример

pp = pchip(x,y) возвращает структуру кусочного полинома для использования с ppval и утилитой unmkpp сплайна.

Примеры

свернуть все

Сравните результаты интерполяции, приведенные spline и pchip для двух различных функций.

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

x = -3:3; 
y = [-1 -1 -1 0 1 1 1]; 
xq1 = -3:.01:3;
p = pchip(x,y,xq1);
s = spline(x,y,xq1);
plot(x,y,'o',xq1,p,'-',xq1,s,'-.')
legend('Sample Points','pchip','spline','Location','SouthEast')

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

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

x = 0:25;
y = besselj(1,x);
xq2 = 0:0.01:25;
p = pchip(x,y,xq2);
s = spline(x,y,xq2);
plot(x,y,'o',xq2,p,'-',xq2,s,'-.')
legend('Sample Points','pchip','spline')

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

Создайте векторы для значений x и значений функции y, и затем используйте pchip, чтобы создать структуру кусочного полинома.

x = -5:5;
y = [1 1 1 1 0 0 1 2 2 2 2];
p = pchip(x,y);

Используйте структуру с ppval, чтобы оценить интерполяцию в нескольких точках запроса. Постройте график результатов.

xq = -5:0.2:5;
pp = ppval(p,xq);
plot(x,y,'o',xq,pp,'-.')
ylim([-0.2 2.2])

Входные параметры

свернуть все

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

Типы данных: single | double

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

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

Типы данных: single | double

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

Типы данных: single | double

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

свернуть все

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

  • Если y является вектором, то p является вектором, который имеет ту же длину как xq.

  • Если y имеет две или больше размерности, обозначенные n, то p имеет размер [size(y,1) size(y,2) ... size(y,n-1) length(xq)]. Например, если y является матрицей, то p имеет размер [size(y,1) length(xq)].

Кусочный полином, возвращенный как структура. Используйте эту структуру с функцией ppval, чтобы оценить интерполяционные многочлены в одной или нескольких точках запроса. Структура имеет эти поля.

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

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

breaks

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

coefs

L-by-k матрица с каждой строкой coefs(i,:) , содержащий локальные коэффициенты порядка  многочлен k на i th интервал, [breaks(i),breaks(i+1)]

pieces

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

order

Порядок многочленов

dim

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

Поскольку полиномиальные коэффициенты в coefs являются локальными коэффициентами для каждого интервала, необходимо вычесть более низкую конечную точку соответствующего интервала узла, чтобы использовать коэффициенты в обычном полиномиальном уравнении. Другими словами, для коэффициентов [a,b,c,d] на интервале [x1,x2], соответствующий многочлен

f (x) =a (x−x1) 3+b (x−x1) 2+c (x−x1) +d .

Больше о

свернуть все

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

pchip интерполирует использование кусочного кубического полинома P (x) с этими свойствами:

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

  • P (x) интерполирует y, то есть, P (xj) =yj, и первая производная dPdx непрерывна. Вторая производная d2Pdx2, вероятно, не непрерывна так схватил xj, возможны.

  • Кубический interpolant P (x) является сохранением формы. Наклоны в xj выбраны таким способом который P (x) заповедники форма монотонности данных и отношений. Поэтому на интервалах, где данные является монотонным, так P (x), и в точках, где данные имеют локальный экстремум, также - P (x).

Примечание

Если y является матрицей, P (x) удовлетворяет эти свойства для каждой строки y.

Советы

  • spline создает S (x) почти тем же способом, которым pchip создает P (x). Однако spline выбирает наклоны в xj по-другому, а именно, чтобы сделать даже S (x) непрерывный. Это различие имеет несколько эффектов:

    • spline приводит к более сглаженному результату, такому, что S (x) непрерывен.

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

    • pchip не имеет никакого проскакивания и меньшего количества колебания, если данные не сглаженны.

    • pchip является менее дорогим, чтобы настроить.

    • Эти два являются одинаково дорогими, чтобы оценить.

Ссылки

[1] Fritsch, F. N. и Р. E. Карлсон. "Монотонная Кусочная Кубичная интерполяция". SIAM Journal согласно Числовому Анализу. Издание 17, 1980, pp.238-246.

[2] Kahaner, Дэвид, Клив Moler, Стивен Нэш. Численные методы и программное обеспечение. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1988.

Расширенные возможности

Смотрите также

| |

Представлено до R2006a

Была ли эта тема полезной?