Buscar..


Sintaxis

  1. zy = interp1 (x, y);
  2. zy = interp1 (x, y, 'método');
  3. zy = interp1 (x, y, 'método', 'extrapolación');
  4. zy = interp1 (x, y, zx);
  5. zy = interp1 (x, y, zx, 'método');
  6. zy = interp1 (x, y, zx, 'método', 'extrapolación');

Interpolación a trozos 2 dimensiones.

Inicializamos los datos:

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

La superficie se parece a la siguiente. datos interp2

Ahora establecemos los puntos donde queremos interpolar:

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

Ahora podemos realizar la interpolación más cercana,

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

interp2-más cercano

Interpolación linear,

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

interp2-linear

interpolación cúbica

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

o interpolación spline:

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

interp2-spline

Interpolación por partes 1 dimensional

Utilizaremos los siguientes datos:

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

datos interp1

De este modo, x e y son las coordenadas de los puntos de datos y z son los puntos sobre los que necesitamos información.

z = 0:0.25:50;

Una forma de encontrar los valores de y de z es la interpolación lineal por partes.

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

interp1-linear

De este modo, uno calcula la línea entre dos puntos adyacentes y obtiene z_y suponiendo que el punto sería un elemento de esas líneas.

interp1 proporciona otras opciones como la interpolación más cercana,

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

interp1-nearst

siguiente interpolación,

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

interp1-next

interpolación previa,

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

interp1-anterior

Interpolación cúbica por trozos que conserva la forma,

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

interp1-pchip

convolución cúbica, z_y = interp1 (x, y, z, 'v5cubic');

interp1-v5cubic

y la interpolación spline

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

interp1-spline

De este modo, la interpolación más cercana, la siguiente y la anterior son interpolaciones constantes a trozos.

Interpolación polinómica

Inicializamos los datos que queremos interpolar:

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

Esto significa que la función subyacente para los datos en el intervalo [0,10] es sinusoidal. Ahora se están calculando los coeficientes de los polinomios aproximados:

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

De este modo, x es el valor de x e y el valor de y de nuestros puntos de datos y el tercer número es el orden / grado del polinomio. Ahora configuramos la cuadrícula en la que queremos calcular nuestra función de interpolación en:

zx = 0:0.1:10;

y calcular los valores de y:

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

Se puede ver que el error de aproximación para la muestra se reduce cuando aumenta el grado del polinomio.

poly1-3

Si bien la aproximación de la línea recta en este ejemplo tiene errores mayores, el polinomio de orden 3 se aproxima a la función sinusal en este intervalo relativamente bueno.

poly5 + 10

La interpolación con los polinomios orden 5 y orden 10 casi no tiene error de aproximación.

Sin embargo, si consideramos el rendimiento fuera de la muestra, se ve que los pedidos demasiado altos tienden a sobreponerse y, por lo tanto, obtener un mal rendimiento fuera de la muestra. Nosotros fijamos

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

y

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

Si echamos un vistazo a la trama, vemos que el rendimiento fuera de la muestra es mejor para el orden 1

outOfSample1-3

y sigue empeorando con el aumento de grado.

introduzca la descripción de la imagen aquí



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow