Sök…


Syntax

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

Piecewise interpolation 2 dimensionell

Vi initialiserar uppgifterna:

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

Ytan ser ut enligt följande. interp2-data

Nu sätter vi de punkter där vi vill interpolera:

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

Vi kan nu utföra närmaste interpolering,

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

interp2-närmaste

linjär interpolation,

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

interp2-linjär

kubisk interpolering

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

eller splineinterpolation:

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

interp2-spline

Piecewise interpolation 1 dimensionell

Vi kommer att använda följande data:

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

interp1-data

Härmed är x och y koordinaterna för datapunkterna och z är de punkter vi behöver information om.

z = 0:0.25:50;

Ett sätt att hitta y-värdena för z är delvis linjär interpolering.

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

interp1-linjär

Här räknar man ut linjen mellan två angränsande punkter och blir z_y genom att anta att punkten skulle vara ett element i dessa linjer.

interp1 ger andra alternativ också som närmaste interpolering,

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

interp1-nearst

nästa interpolering,

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

interp1-nästa

tidigare interpolering,

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

interp1-föregående

Formbevarande bitvis kubisk interpolering,

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

interp1-pchip

kubisk upplösning, z_y = interp1 (x, y, z, 'v5cubic');

interp1-v5cubic

och spline-interpolering

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

interp1-spline

Härmed är närmaste, nästa och föregående interpolering i delvis konstant interpolering.

Polynom interpolation

Vi initialiserar data vi vill interpolera:

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

Detta betyder att den underliggande funktionen för data i intervallet [0,10] är sinusformad. Nu beräknas koefficienterna för de ungefärliga polynomialerna:

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

Härmed är x x-värdet och y y-värdet för våra datapunkter och det tredje numret är ordningen / graden av polynomet. Vi ställer nu det rutnät vi vill beräkna vår interpoleringsfunktion på:

zx = 0:0.1:10;

och beräkna y-värdena:

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

Man kan se att approximationsfelet för provet blir mindre när graden av polynomet ökar.

poly1-3

Medan tillnärmningen av den raka linjen i detta exempel har större fel, ordnar polynom ordning 3 ungefär sinusfunktionen i detta intervall relativt bra.

poly5 + 10

Interpolationen med ordning 5 och ordning 10 polynom har nästan inget apprroximeringsfel.

Men om vi tar hänsyn till prestandan utanför provet ser man att för höga beställningar tenderar att överföra och därför fungerar dåligt ur provet. Vi sätter

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

och

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

Om vi tar en titt på handlingen ser vi att resultatet av provet är bäst för ordningen 1

outOfSample1-3

och blir allt värre med allt högre grad.

ange bildbeskrivning här



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow