сплайн

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

Синтаксис

s = spline(x,y,xq)
pp = spline(x,y)

Описание

пример

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)

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

x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');

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

Создайте два вектора, чтобы представлять годы переписи от 1 900 до 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 ];

Экстраполируйте и предскажите генеральную совокупность в году 2 000 использований кубического сплайна.

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

Используйте сплайн, чтобы выбрать функцию по более прекрасной 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

Сравните результаты интерполяции, приведенные 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-, заданные как вектор. Векторный x задает точки, в которых данные дан y. Элементы x должны быть уникальными.

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

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

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

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

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

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

  • Если y является вектором, который содержит еще два значения, чем x имеет записи, то spline использует первые и последние значения в y как endslopes для кубического сплайна. Например, если 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 - координирует для интерполированных значений функции s, который вычисляет 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 со строго увеличивающимися элементами, которые представляют запуск и конец каждого 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(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] де Бор, Карл. Практическое Руководство по Сплайнам. Спрингер-Верлэг, Нью-Йорк: 1978.

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

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

| | | |

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