spline

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

Описание

пример

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

пример

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

Примеры

свернуть все

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

x = [0 1 2.5 3.6 5 7 8.1 10];
y = sin(x);
xx = 0:.25:10;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)

Figure contains an axes. The axes contains 2 objects of type line.

Используйте зажимную или полную сплайн интерполяцию, когда известны наклоны конечных точек. Для этого можно задать вектор значений y с двумя дополнительными элементами, один в начале и один в конце, для определения наклонов конечных точек.

Создайте вектор данных y и другой вектор с x-координаты данных.

x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];

Интерполируйте данные с помощью spline и постройте график результатов. Задайте второй вход с двумя дополнительными значениями [0 y 0] чтобы обозначить, что оба уклона конечных точек равны нулю. Использование ppval для вычисления соответствия сплайна по 101 точке в интерполяционном интервале.

cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');

Figure contains an axes. The axes contains 2 objects of type line.

Экстраполируйте набор данных, чтобы предсказать рост населения.

Создать два вектора, чтобы представлять годы переписи населения с 1900 по 1990 год (t) и соответствующее население США в миллионах людей (p).

t = 1900:10:1990;
p = [ 75.995  91.972  105.711  123.203  131.669 ...
     150.697 179.323  203.212  226.505  249.633 ];

Экстраполируйте и прогнозируйте население в 2000 году с помощью кубического сплайна.

spline(t,p,2000)
ans = 270.6060

Сгенерируйте график круга с пятью точками данных y(:,2),...,y(:,6) отмеченный o's. Матрица y содержит еще два столбца, чем есть x. Поэтому spline использует y(:,1) и y(:,end) как endslopes. Круг начинается и заканчивается в точке (1,0), так что точка строится дважды.

x = pi*[0:.5:2]; 
y = [0  1  0 -1  0  1  0; 
     1  0  1  0 -1  0  1];
pp = spline(x,y);
yy = ppval(pp, linspace(0,2*pi,101));
plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or')
axis equal

Figure contains an axes. The axes contains 2 objects of type line.

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

Сгенерируйте кривые синуса и косинуса для нескольких значений от 0 до 1. Используйте сплайн интерполяцию, чтобы дискретизировать функции по более мелкому mesh.

x = 0:.25:1;
Y = [sin(x); cos(x)];
xx = 0:.1:1;
YY = spline(x,Y,xx);
plot(x,Y(1,:),'o',xx,YY(1,:),'-')
hold on
plot(x,Y(2,:),'o',xx,YY(2,:),':')
hold off

Figure contains an axes. The axes contains 4 objects of type line.

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

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

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);
m = makima(x,y,xq1);
plot(x,y,'o',xq1,p,'-',xq1,s,'-.',xq1,m,'--')
legend('Sample Points','pchip','spline','makima','Location','SouthEast')

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Sample Points, pchip, spline, makima.

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

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

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

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Sample Points, pchip, spline, makima.

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

    • y(:,:,...:,1) приводит склоны в начале интервалов, расположенных на min(x)

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

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

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

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

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

свернуть все

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

Размер 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)].

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

ОбластьОписание
form

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

breaks

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

coefs

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

pieces

Количество штук, L

order

Порядок полиномов

dim

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

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

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

Совет

  • Вы также можете выполнить сплайн интерполяцию, используя interp1 функция с командой interp1(x,y,xq,'spline'). Пока spline выполняет интерполяцию строк матрицы входа, interp1 выполняет интерполяцию по столбцам матрицы входа.

Алгоритмы

Тридиагональная линейная система (возможно, с несколькими правыми сторонами) решена за информацию, необходимую для описания коэффициентов различных кубических полиномов, которые составляют интерполяционный сплайн. spline использует функции ppval, mkpp, и unmkpp. Эти стандартные программы образуют небольшой набор функций для работы с кусочными полиномами. Для доступа к более расширенным функциям см. interp1 или функции сплайна Curve Fitting Toolbox™.

Ссылки

[1] де Бур, Карл. Практическое руководство по сплайнам. Springer-Verlag, Нью-Йорк: 1978.

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

.

См. также

| | |

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