Интерполяция данных кубическими сплайнами
Используйте 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),'-');
Экстраполируйте набор данных, чтобы предсказать прирост населения.
Создайте два вектора, чтобы представлять годы переписи от 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
, и makima
Сравните результаты интерполяции, приведенные spline
pchip
, и makima
для двух различных наборов данных. Эти функции все выполняют различные формы кусочной кубической интерполяции Эрмита. Каждая функция отличается по тому, как она вычисляет наклоны interpolant, ведя к различным поведениям, когда базовые данные имеют плоские области или волнистости.
Сравните результаты интерполяции на выборочных данных, которые соединяют плоские области. Создайте векторы из 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 - координируют в виде числового вектора, матрицы или массива. 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
— Точки запросаТочки запроса в виде скаляра, вектора, матрицы или массива. Точки заданы в 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] де Бор, Карл. Практическое Руководство по Сплайнам. Спрингер-Верлэг, Нью-Йорк: 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
mustBeNonsparse.
Для получения дополнительной информации смотрите функции MATLAB Запуска на графическом процессоре (Parallel Computing Toolbox).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.