Интерполяция данных кубическими сплайнами
Используйте 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

splinepchip, и makimaСравните результаты интерполяции, приведенные 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 - координаты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 использует функции ppvalmkpp, и 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.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.