MATLAB Language
Interpolación con MATLAB
Buscar..
Sintaxis
- zy = interp1 (x, y);
- zy = interp1 (x, y, 'método');
- zy = interp1 (x, y, 'método', 'extrapolación');
- zy = interp1 (x, y, zx);
- zy = interp1 (x, y, zx, 'método');
- 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.
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');
Interpolación linear,
Vz = interp2(X,Y,Z,Vx,Vy,'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');
Interpolación por partes 1 dimensional
Utilizaremos los siguientes datos:
x = 1:5:50;
y = randi([-10 10],1,10);
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');
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');
siguiente interpolación,
z_y = interp1(x,y,z, 'next');
interpolación previa,
z_y = interp1(x,y,z, 'previous');
Interpolación cúbica por trozos que conserva la forma,
z_y = interp1(x,y,z, 'pchip');
convolución cúbica, z_y = interp1 (x, y, z, 'v5cubic');
y la interpolación spline
z_y = interp1(x,y,z, '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.
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.
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
y sigue empeorando con el aumento de grado.