Szukaj…


Składnia

  1. zy = interp1 (x, y);
  2. zy = interp1 (x, y, „metoda”);
  3. zy = interp1 (x, y, „metoda”, „ekstrapolacja”);
  4. zy = interp1 (x, y, zx);
  5. zy = interp1 (x, y, zx, „metoda”);
  6. zy = interp1 (x, y, zx, „metoda”, „ekstrapolacja”);

Interpolacja częściowa 2 wymiarowa

Inicjujemy dane:

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

Powierzchnia wygląda następująco. interp2-data

Teraz ustalamy punkty, w których chcemy interpolować:

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

Możemy teraz wykonać najbliższą interpolację,

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

interp2-najbliższy

interpolacja liniowa,

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

interp2-liniowy

interpolacja sześcienna

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

lub interpolacja splajnu:

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

interp2-splajn

Interpolacja częściowa 1 wymiarowa

Wykorzystamy następujące dane:

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

interp1-data

Niniejszym x i y są współrzędnymi punktów danych i z są punkty potrzebne nam informacje.

z = 0:0.25:50;

Jednym ze sposobów znalezienia wartości y z jest częściowa interpolacja liniowa.

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

interp1-liniowy

Niniejszym oblicza się linię między dwoma sąsiadującymi punktami i otrzymuje z_y , zakładając, że punkt będzie elementem tych linii.

interp1 zapewnia także inne opcje, takie jak najbliższa interpolacja,

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

interp1-nearst

następna interpolacja,

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

interp1-next

poprzednia interpolacja,

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

interp1-previous

Zachowująca kształt częściowa interpolacja sześcienna,

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

interp1-pchip

splot sześcienny, z_y = interp1 (x, y, z, 'v5cubic');

interp1-v5cubic

i interpolacja splajnu

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

interp1-splajn

Niniejszym znajdują się najbliższe, następne i poprzednie interpolacje, częściowe stałe interpolacje.

Interpolacja wielomianowa

Inicjalizujemy dane, które chcemy interpolować:

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

Oznacza to, że podstawową funkcją danych w przedziale [0,10] jest sinusoidalny. Teraz obliczane są współczynniki aproksymalnych wielomianów:

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);

Uzyskuje się x wartości X i y Y wartości naszych punktów danych, a trzecią liczbą jest kolejność / stopień wielomianu. Teraz ustawiamy siatkę, na której chcemy obliczyć naszą funkcję interpolacji:

zx = 0:0.1:10;

i obliczyć wartości y:

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

Widać, że błąd aproksymacji dla próbki zmniejsza się wraz ze wzrostem stopnia wielomianu.

poli1-3

Podczas gdy przybliżenie linii prostej w tym przykładzie ma większe błędy, wielomian rzędu 3 aproksymuje funkcję zatoki w tym przedziale stosunkowo dobrze.

poly5 + 10

Interpolacja z wielomianami rzędu 5 i rzędu 10 nie ma prawie żadnego błędu aproksymacji.

Jeśli jednak weźmiemy pod uwagę wydajność poza próbą, zauważymy, że zbyt wysokie zamówienia mają tendencję do przeładowywania się i dlatego źle działają poza próbą. Ustawiamy

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

i

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

Jeśli spojrzymy na wykres, zobaczymy, że wydajność poza próbą jest najlepsza dla rzędu 1

outOfSample1-3

i pogarsza się wraz ze wzrostem stopnia.

wprowadź opis zdjęcia tutaj



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow