MATLAB Language
Interpolacja z MATLAB
Szukaj…
Składnia
- zy = interp1 (x, y);
- zy = interp1 (x, y, „metoda”);
- zy = interp1 (x, y, „metoda”, „ekstrapolacja”);
- zy = interp1 (x, y, zx);
- zy = interp1 (x, y, zx, „metoda”);
- 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.
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');
interpolacja liniowa,
Vz = interp2(X,Y,Z,Vx,Vy,'linear');
interpolacja sześcienna
Vz = interp2(X,Y,Z,Vx,Vy,'cubic');
lub interpolacja splajnu:
Vz = interp2(X,Y,Z,Vx,Vy,'spline');
Interpolacja częściowa 1 wymiarowa
Wykorzystamy następujące dane:
x = 1:5:50;
y = randi([-10 10],1,10);
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');
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');
następna interpolacja,
z_y = interp1(x,y,z, 'next');
poprzednia interpolacja,
z_y = interp1(x,y,z, 'previous');
Zachowująca kształt częściowa interpolacja sześcienna,
z_y = interp1(x,y,z, 'pchip');
splot sześcienny, z_y = interp1 (x, y, z, 'v5cubic');
i interpolacja splajnu
z_y = interp1(x,y,z, 'spline');
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.
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.
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
i pogarsza się wraz ze wzrostem stopnia.