Кубическая сплайн интерполяция данных
Использование 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];
Интерполируйте данные с помощью 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),'-');
Экстраполируйте набор данных, чтобы предсказать рост населения.
Создать два вектора, чтобы представлять годы переписи населения с 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
Используйте сплайн для выборки функции по более мелкому 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
, и makima
Сравните результаты интерполяции, полученные 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')
В этом случае 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 -координатыx -координаты, заданные как вектор. Векторная x
задает точки, в которых находятся данные y
дается. Элементы x
должен быть уникальным.
Типы данных: single
| double
y
- Значения функций в x -координатахЗначения функции в 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
- Точки запросаТочки запроса, заданные как скаляр, вектор, матрица или массив. Точки, указанные в xq
являются x -координатами для интерполированных значений функции yq
вычисляется spline
.
Типы данных: single
| double
s
- Интерполированные значения в точках запросаИнтерполированные значения в точках запроса, возвращенные в виде скаляра, вектора, матрицы или массива.
Размер 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)]
.
pp
- Кусочно-полиномиальныйКусочный полином, возвращается как структура. Используйте эту структуру с ppval
функция для вычисления кусочного полинома в одной или нескольких точках запроса. Структура имеет эти поля.
Область | Описание |
---|---|
form |
|
breaks | Вектор длины |
coefs |
|
pieces | Количество штук, |
order | Порядок полиномов |
dim | Размерность цели |
Поскольку полиномиальные коэффициенты в coefs
являются локальными коэффициентами для каждого интервала, необходимо вычесть нижнюю конечную точку соответствующего узлового интервала, чтобы использовать коэффициенты в обычном полиномиальном уравнении. Другими словами, для коэффициентов [a,b,c,d]
по интервалу [x1,x2]
, соответствующий полином является
Вы также можете выполнить сплайн интерполяцию, используя interp1
функция с командой interp1(x,y,xq,'spline')
. Пока spline
выполняет интерполяцию строк матрицы входа, interp1
выполняет интерполяцию по столбцам матрицы входа.
Тридиагональная линейная система (возможно, с несколькими правыми сторонами) решена за информацию, необходимую для описания коэффициентов различных кубических полиномов, которые составляют интерполяционный сплайн. spline
использует функции ppval
, mkpp
, и unmkpp
. Эти стандартные программы образуют небольшой набор функций для работы с кусочными полиномами. Для доступа к более расширенным функциям см. interp1
или функции сплайна Curve Fitting Toolbox™.
[1] де Бур, Карл. Практическое руководство по сплайнам. Springer-Verlag, Нью-Йорк: 1978.
Указания и ограничения по применению:
Входные x
должно быть строго увеличено.
Генерация кода не удаляет y
записи с NaN
значения.
Генерация кода не сообщает об ошибке для бесконечных endslopes в y
.
Если вы генерируете код для pp = spline(x,y)
синтаксис, тогда вы не можете ввести pp
в ppval
функция в MATLAB®. Создание pp
MATLAB структура из
pp
структура, созданная генератором кода:
В генерации кода используйте unmkpp
чтобы вернуть кусочно-полиномиальные детали в MATLAB.
В MATLAB используйте mkpp
чтобы создать pp
структура.
Если вы поставляете xq
, и если y
имеет размер переменной и не является вектором переменной длины, тогда ориентация векторных выходов в сгенерированном коде может не совпадать с ориентацией в MATLAB.
Указания и ограничения по применению:
Входной параметр y
не должно быть разреженным.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.