Zoeken…


Syntaxis

  1. zy = interp1 (x, y);
  2. zy = interp1 (x, y, 'methode');
  3. zy = interp1 (x, y, 'methode', 'extrapolatie');
  4. zy = interp1 (x, y, zx);
  5. zy = interp1 (x, y, zx, 'methode');
  6. zy = interp1 (x, y, zx, 'methode', 'extrapolatie');

Stuksgewijze interpolatie 2 dimensionaal

We initialiseren de gegevens:

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

Het oppervlak ziet er als volgt uit. interp2-data

Nu stellen we de punten in waar we willen interpoleren:

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

We kunnen nu de dichtstbijzijnde interpolatie uitvoeren,

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

interp2-nearest

lineaire interpolatie,

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

interp2-lineaire

kubieke interpolatie

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

of spline-interpolatie:

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

interp2-spline

Stuksgewijze interpolatie 1 dimensionaal

We zullen de volgende gegevens gebruiken:

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

interp1-data

Hierbij zijn x en y de coördinaten van de gegevenspunten en z zijn de punten waarover we informatie nodig hebben.

z = 0:0.25:50;

Een manier om de y-waarden van z te vinden is een stukgewijze lineaire interpolatie.

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

interp1-lineaire

Hierbij berekent men de lijn tussen twee aangrenzende punten en krijgt z_y door aan te nemen dat het punt een element van die lijnen zou zijn.

interp1 biedt ook andere opties zoals dichtstbijzijnde interpolatie,

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

interp1-nearst

volgende interpolatie,

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

interp1-next

vorige interpolatie,

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

interp1-vorige

Vormbehoudende stukjes kubieke interpolatie,

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

interp1-pchip

kubieke convolutie, z_y = interp1 (x, y, z, 'v5cubic');

interp1-v5cubic

en spline-interpolatie

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

interp1-spline

Hierbij zijn de meest nabije, volgende en vorige interpolatie stuksgewijs constante interpolaties.

Polynomiale interpolatie

We initialiseren de gegevens die we willen interpoleren:

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

Dit betekent dat de onderliggende functie voor de gegevens in het interval [0,10] sinusvormig is. Nu worden de coëfficiënten van de benaderende polynómials berekend:

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

Hierbij is x de x-waarde en y de y-waarde van onze gegevenspunten en het derde getal is de volgorde / graad van de polynoom. We stellen nu het raster in waarop we onze interpolatiefunctie willen berekenen:

zx = 0:0.1:10;

en bereken de y-waarden:

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

Men kan zien dat de benaderingsfout voor het monster kleiner wordt wanneer de mate van de polynoom toeneemt.

poly1-3

Hoewel de benadering van de rechte lijn in dit voorbeeld grotere fouten heeft, benadert de orde 3 polynoom de sinusfunctie in dit interval relatief goed.

poly5 +10

De interpolatie met polynomen van orde 5 en orde 10 heeft bijna geen benaderingsfout.

Als we echter rekening houden met de prestaties die buiten de steekproef liggen, zien we dat te hoge bestellingen de neiging hebben om over te passen en daarom slecht presteren buiten de steekproef. We zetten

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

en

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

Als we de plot bekijken, zien we dat de out of sample performance het beste is voor de volgorde 1

outOfSample1-3

en wordt steeds erger met toenemende mate.

voer hier de afbeeldingsbeschrijving in



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow