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)

Используйте зафиксированную или полную интерполяцию сплайна, когда наклоны конечной точки будут известны. Для этого можно задать вектор значений 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),'-');

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

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

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

Сравните результаты интерполяции на выборочных данных, которые соединяют плоские области. Создайте векторы из x значения, значения функции в тех точках y, и точки запроса xq. Вычислите интерполяции в точках запроса с помощью splinepchip, и 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')

В этом случае, 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')

Когда базовая функция является колебательной, spline и makima получите перемещение между точками лучше, чем 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 - координирует для интерполированных значений функции 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  со строго увеличивающимися элементами, которые представляют начало и конец каждого of L интервалы

coefs

L- 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