Поиск…


Синтаксис

  1. zy = interp1 (x, y);
  2. zy = interp1 (x, y, 'method');
  3. zy = interp1 (x, y, 'метод', 'экстраполяция');
  4. zy = interp1 (x, y, zx);
  5. zy = interp1 (x, y, zx, 'method');
  6. zy = interp1 (x, y, zx, 'метод', 'экстраполяция');

Кусочно-интерполяционная 2-мерная

Мы инициализируем данные:

[X,Y] = meshgrid(1:2:10);
Z = X.*cos(Y) - Y.*sin(X);

Поверхность выглядит следующим образом. interp2-данные

Теперь мы устанавливаем точки, в которые мы хотим интерполировать:

[Vx,Vy] = meshgrid(1:0.25:10); 

Теперь мы можем выполнить ближайшую интерполяцию,

Vz = interp2(X,Y,Z,Vx,Vy,'nearest');

interp2 ближайшему

линейная интерполяция,

Vz = interp2(X,Y,Z,Vx,Vy,'linear');

interp2-линейный

кубическая интерполяция

Vz = interp2(X,Y,Z,Vx,Vy,'cubic');

или сплайн-интерполяция:

Vz = interp2(X,Y,Z,Vx,Vy,'spline');

interp2-сплайн

Кусочная интерполяция 1 мерная

Мы будем использовать следующие данные:

x = 1:5:50;
y = randi([-10 10],1,10);

interp1-данные

Таким образом, x и y являются координатами точек данных, а z - это те точки, в которых нам нужна информация.

z = 0:0.25:50;

Одним из способов найти y-значения z является кусочно-линейная интерполяция.

z_y = interp1(x,y,z,'linear');

interp1-линейный

Таким образом, мы вычисляем линию между двумя соседними точками и получаем z_y , предполагая, что точка будет элементом этих линий.

interp1 предоставляет другие параметры, например, ближайшую интерполяцию,

z_y = interp1(x,y,z, 'nearest');

interp1-nearst

следующая интерполяция,

z_y = interp1(x,y,z, 'next');

interp1-некст

предыдущая интерполяция,

z_y = interp1(x,y,z, 'previous');

interp1-предыдущая

Сохранение формы кусочно-кубической интерполяцией,

z_y = interp1(x,y,z, 'pchip');

interp1-pchip

кубическая свертка, z_y = interp1 (x, y, z, 'v5cubic');

interp1-v5cubic

и сплайн-интерполяция

z_y = interp1(x,y,z, 'spline');

interp1-сплайн

Ниже приведены приближенные, последующие и предыдущие интерполяционные кусочно-постоянные интерполяции.

Полиномиальная интерполяция

Мы инициализируем данные, которые мы хотим интерполировать:

x = 0:0.5:10;
y = sin(x/2);

Это означает, что основная функция для данных в интервале [0,10] является синусоидальной. Теперь вычисляются коэффициенты аппроксимирующих полиномов:

p1 = polyfit(x,y,1);
p2 = polyfit(x,y,2);
p3 = polyfit(x,y,3);
p5 = polyfit(x,y,5);
p10 = polyfit(x,y,10);

Таким образом это x величин х и y у-значение наших точек данных и третье число является порядок / степенью многочлена. Теперь мы устанавливаем сетку, которую хотим вычислить нашу интерполяционную функцию:

zx = 0:0.1:10;

и вычислить значения у:

zy1 = polyval(p1,zx);
zy2 = polyval(p2,zx);
zy3 = polyval(p3,zx);
zy5 = polyval(p5,zx);
zy10 = polyval(p10,zx);

Видно, что погрешность аппроксимации для образца уменьшается при увеличении степени полинома.

poly1-3

Хотя приближение прямой в этом примере имеет более крупные ошибки, полином порядка 3 аппроксимирует синусовую функцию в этой взаимосвязи относительно хорошо.

poly5 + 10

Интерполяция с полиномами порядка 5 и порядка 10 почти не имеет погрешности apprroximation.

Однако, если мы рассмотрим эффективность выборки, мы увидим, что слишком высокие заказы имеют тенденцию перегружать и, следовательно, плохо работают с образцом. Мы установили

zx = -10:0.1:40;
p10 = polyfit(X,Y,10);
p20 = polyfit(X,Y,20);

а также

zy10 = polyval(p10,zx);
zy20 = polyval(p20,zx);

Если мы посмотрим на график, мы увидим, что выборка производительности лучше всего подходит для заказа 1

outOfSample1-3

и все более ухудшается.

введите описание изображения здесь



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow