exponenta event banner

сплайн

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

Описание

пример

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) в качестве конечных откосов. Круг начинается и заканчивается в точке (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.

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

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

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, заданные как числовой вектор, матрица или массив. 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около-k  матрица с каждой строкой coefs(i,:) содержащий локальные коэффициенты порядка k многочлен на iтый интервал, [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.

Совет

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

Алгоритмы

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

Ссылки

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

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

.

См. также

| | |

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