Main Content

interp1

Interpolación de datos 1D (búsqueda en tabla)

Descripción

ejemplo

vq = interp1(x,v,xq) devuelve valores interpolados de una función 1D en puntos de consulta específicos utilizando la interpolación lineal. El vector x contiene puntos de muestra y v contiene los valores correspondientes, v (x). El vector xq contiene las coordenadas de los puntos de consulta.

Si tiene varios conjuntos de datos que se muestrean en las mismas coordenadas de puntos, puede pasar v como arreglo. Cada columna del arreglo v contiene un conjunto distinto de valores de muestra 1D.

ejemplo

vq = interp1(x,v,xq,method) especifica un método de interpolación alternativo: 'linear', 'nearest', 'next', 'previous', 'pchip', 'cubic', 'v5cubic', 'makima' o 'spline'. El método predeterminado es 'linear'.

ejemplo

vq = interp1(x,v,xq,method,extrapolation) especifica una estrategia para evaluar puntos que se encuentran fuera del dominio de x. Establezca extrapolation en 'extrap' cuando desea utilizar el algoritmo method para la extrapolación. También puede especificar un valor escalar, en cuyo caso interp1 devuelve ese valor para todos los puntos fuera del dominio de x.

ejemplo

vq = interp1(v,xq) devuelve valores interpolados y asume un conjunto predeterminado de coordenadas de puntos de muestra. Los puntos predeterminados son la secuencia de números de 1 a n, donde n depende de la forma de v:

  • Cuando v es un vector, los puntos predeterminados son 1:length(v).

  • Cuando v es un arreglo, los puntos predeterminados son 1:size(v,1).

Utilice esta sintaxis cuando no le preocupen las distancias absolutas entre puntos.

vq = interp1(v,xq,method) especifica cualquiera de los métodos alternativos de interpolación y utiliza los puntos de muestra predeterminados.

vq = interp1(v,xq,method,extrapolation) especifica una estrategia de interpolación y utiliza los puntos de muestra predeterminados.

pp = interp1(x,v,method,'pp') devuelve la forma polinomial por tramos de v (x) utilizando el algoritmo method.

Nota

No se recomienda esta sintaxis. En su lugar, utilice griddedInterpolant.

Ejemplos

contraer todo

Defina los puntos de muestra, x, y los valores de muestra correspondientes, v.

x = 0:pi/4:2*pi; 
v = sin(x);

Defina los puntos de consulta para un muestreo más preciso a lo largo del rango de x.

xq = 0:pi/16:2*pi;

Interpole la función en los puntos de consulta y represente el resultado.

figure
vq1 = interp1(x,v,xq);
plot(x,v,'o',xq,vq1,':.');
xlim([0 2*pi]);
title('(Default) Linear Interpolation');

Figure contains an axes object. The axes object with title (Default) Linear Interpolation contains 2 objects of type line. One or more of the lines displays its values using only markers

Ahora evalúe v en los mismos puntos utilizando el método 'spline'.

figure
vq2 = interp1(x,v,xq,'spline');
plot(x,v,'o',xq,vq2,':.');
xlim([0 2*pi]);
title('Spline Interpolation');

Figure contains an axes object. The axes object with title Spline Interpolation contains 2 objects of type line. One or more of the lines displays its values using only markers

Defina un conjunto de valores de función.

v = [0  1.41  2  1.41  0  -1.41  -2  -1.41 0];

Defina un conjunto de puntos de consulta que se encuentren entre los puntos predeterminados, 1:9. En este caso, los puntos predeterminados son 1:9 porque v contiene 9 valores.

xq = 1.5:8.5;

Evalúe v en xq.

vq = interp1(v,xq);

Represente el resultado.

figure
plot((1:9),v,'o',xq,vq,'*');
legend('v','vq');

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent v, vq.

Defina un conjunto de puntos de muestra.

x = 1:10;

Defina los valores de la función, v(x)=5x+x2i, en los puntos de muestra.

v = (5*x)+(x.^2*1i);

Defina los puntos de consulta para un muestreo más preciso a lo largo del rango de x.

xq = 1:0.25:10;

Interpole v en los puntos de consulta.

vq = interp1(x,v,xq);

Represente la parte real del resultado en rojo y la parte imaginaria en azul.

figure
plot(x,real(v),'*r',xq,real(vq),'-r');
hold on
plot(x,imag(v),'*b',xq,imag(vq),'-b');

Figure contains an axes object. The axes object contains 4 objects of type line. One or more of the lines displays its values using only markers

Interpole puntos de datos con marca de tiempo.

Considere un conjunto de datos que contenga lecturas de temperatura medidas cada cuatro horas. Cree una tabla con datos de un día y represente los datos.

x = (datetime(2016,1,1):hours(4):datetime(2016,1,2))';
x.Format = 'MMM dd, HH:mm';
T = [31 25 24 41 43 33 31]';
WeatherData = table(x,T,'VariableNames',{'Time','Temperature'})
WeatherData=7×2 table
        Time         Temperature
    _____________    ___________

    Jan 01, 00:00        31     
    Jan 01, 04:00        25     
    Jan 01, 08:00        24     
    Jan 01, 12:00        41     
    Jan 01, 16:00        43     
    Jan 01, 20:00        33     
    Jan 02, 00:00        31     

plot(WeatherData.Time, WeatherData.Temperature, 'o')

Figure contains an axes object. The axes contains a line object which displays its values using only markers.

Interpole el conjunto de datos para predecir la lectura de temperatura durante cada minuto del día. Puesto que los datos son periódicos, utilice el método de interpolación 'spline'.

xq = (datetime(2016,1,1):minutes(1):datetime(2016,1,2))';
V = interp1(WeatherData.Time, WeatherData.Temperature, xq, 'spline');

Represente los puntos interpolados.

hold on
plot(xq,V,'r')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

Defina los puntos de muestra, x, y los valores de muestra correspondientes, v.

x = [1 2 3 4 5];
v = [12 16 31 10 6];

Especifique los puntos de consulta, xq, que se extienden más allá del dominio de x.

xq = [0 0.5 1.5 5.5 6];

Evalúe v en xq usando el método 'pchip'.

vq1 = interp1(x,v,xq,'pchip')
vq1 = 1×5

   19.3684   13.6316   13.2105    7.4800   12.5600

A continuación, evalúe v en xq usando el método 'linear'.

vq2 = interp1(x,v,xq,'linear')
vq2 = 1×5

   NaN   NaN    14   NaN   NaN

Ahora, utilice el método 'linear' con la opción 'extrap'.

vq3 = interp1(x,v,xq,'linear','extrap')
vq3 = 1×5

     8    10    14     4     2

'pchip' extrapola de forma predeterminada, pero 'linear' no lo hace.

Defina los puntos de muestra, x, y los valores de muestra correspondientes, v.

x = [-3 -2 -1 0 1 2 3];
v = 3*x.^2;

Especifique los puntos de consulta, xq, que se extienden más allá del dominio de x.

xq = [-4 -2.5 -0.5 0.5 2.5 4];

Ahora evalúe v en xq usando el método 'pchip' y asigne cualquier valor fuera del dominio de x al valor, 27.

vq = interp1(x,v,xq,'pchip',27)
vq = 1×6

   27.0000   18.6562    0.9375    0.9375   18.6562   27.0000

Defina los puntos de muestra.

x = (-5:5)';

Muestree tres funciones parabólicas distintas en los puntos definidos en x.

v1 = x.^2;
v2 = 2*x.^2 + 2;
v3 = 3*x.^2 + 4;

Cree la matriz v, cuyas columnas son vectores, v1, v2 y v3.

v = [v1 v2 v3];

Defina un conjunto de puntos de consulta, xq, para un muestreo más preciso a lo largo del rango de x.

xq = -5:0.1:5;

Evalúe las tres funciones en xq y represente los resultados.

vq = interp1(x,v,xq,'pchip');
figure
plot(x,v,'o',xq,vq);

h = gca;
h.XTick = -5:5;

Figure contains an axes object. The axes object contains 6 objects of type line. One or more of the lines displays its values using only markers

Los círculos en la gráfica representan v, y las líneas continuas representan vq.

Argumentos de entrada

contraer todo

Puntos de muestra, especificados como vector fila o vector columna de números reales. Los valores en x deben ser distintos. La longitud de x debe cumplir uno de los siguientes requisitos:

  • Si v es un vector, length(x) debe ser igual a length(v).

  • Si v es un arreglo, length(x) debe ser igual a size(v,1).

Ejemplo: [1 2 3 4 5 6 7 8 9 10]

Ejemplo: 1:10

Ejemplo: [3 7 11 15 19 23 27 31]'

Tipos de datos: single | double | duration | datetime

Valores de muestra, especificados como vector, matriz o arreglo de números reales o complejos. Si v es una matriz o un arreglo, cada columna contiene un conjunto independiente de valores 1D.

Si v contiene números complejos, la función interp1 interpola las partes reales y las imaginarias de forma independiente.

Ejemplo: rand(1,10)

Ejemplo: rand(10,1)

Ejemplo: rand(10,3)

Tipos de datos: single | double | duration | datetime
Soporte de números complejos:

Puntos de consulta, especificados como escalar, vector, matriz o arreglo de números reales.

Ejemplo: 5

Ejemplo: 1:0.05:10

Ejemplo: (1:0.05:10)'

Ejemplo: [0 1 2 7.5 10]

Tipos de datos: single | double | duration | datetime

Método de interpolación, especificado como una de las opciones de esta tabla.

Método

Descripción

Continuidad

Comentarios

'linear'

Interpolación lineal. El valor interpolado en un punto de consulta se basa en la interpolación lineal de los valores en los puntos de cuadrícula vecinos de cada dimensión respectiva. Este es el método de interpolación predeterminado.

C0

  • Requiere al menos 2 puntos

  • Requiere más memoria y tiempo de cálculo que el vecino más cercano

'nearest'

Interpolación del vecino más cercano. El valor interpolado en un punto de consulta es el valor en el punto de cuadrícula de muestra más cercano.

Discontinua

  • Requiere al menos 2 puntos

  • Requisitos de memoria moderados

  • El tiempo de cálculo más rápido

'next'

Interpolación del siguiente vecino. El valor interpolado en un punto de consulta es el valor en el siguiente punto de cuadrícula de muestra.

Discontinua

  • Requiere al menos 2 puntos

  • Mismos requisitos de memoria y tiempo de cálculo que 'nearest'

'previous'

Interpolación del vecino anterior. El valor interpolado en un punto de consulta es el valor en el punto anterior de cuadrícula de muestra.

Discontinua

  • Requiere al menos 2 puntos

  • Mismos requisitos de memoria y tiempo de cálculo que 'nearest'

'pchip'

Interpolación cúbica por tramos que conserva la forma. El valor interpolado en un punto de consulta se basa en una interpolación cúbica por tramos de los valores en los puntos de cuadrícula vecinos que conserva la forma.

C1

  • Requiere al menos 4 puntos

  • Requiere más memoria y tiempo de cálculo que 'linear'

'cubic'

Convolución cúbica utilizada en MATLAB® 5.

C1

  • Requiere al menos 3 puntos

  • Los puntos deben estar espaciados uniformemente

  • Este método recurre a la interpolación 'spline' en el caso de datos espaciados de forma irregular

  • Requisitos de memoria y tiempo de cálculo similares a 'pchip'

'v5cubic'

Igual que 'cubic'.

C1

'makima'

Interpolación cúbica de Hermite con Akima modificada. El valor interpolado en un punto de consulta se basa en una función por tramos de polinomios con grado tres como máximo. La fórmula de Akima se modifica para evitar rebasamientos.

C1

  • Requiere al menos 2 puntos

  • Genera menos ondulaciones que 'spline', pero no aplana de forma tan pronunciada como 'pchip'

  • El cálculo es más costoso que en 'pchip', pero típicamente menos que en 'spline'

  • Los requisitos de memoria son similares a los de 'spline'

'spline'

Interpolación por splines utilizando condiciones finales "not-a-knot". El valor interpolado en un punto de consulta se basa en la interpolación cúbica de los valores en los puntos de cuadrícula vecinos de cada dimensión respectiva.

C2

  • Requiere al menos 4 puntos

  • Requiere más memoria y tiempo de cálculo que 'pchip'

Estrategia de extrapolación, especificada como 'extrap' o valor escalar real.

  • Especifique 'extrap' cuando desee que interp1 evalúe puntos fuera del dominio utilizando el mismo método que utiliza para la interpolación.

  • Especifique un valor escalar cuando desee que interp1 devuelva un valor constante específico para puntos fuera del dominio.

El comportamiento predeterminado depende de los argumentos de entrada:

  • Si especifica los métodos de interpolación 'pchip', 'spline' o 'makima', el comportamiento predeterminado es 'extrap'.

  • Todos los demás métodos de interpolación devuelven NaN de forma predeterminada para puntos de consulta fuera del dominio.

Ejemplo: 'extrap'

Ejemplo: 5

Tipos de datos: char | string | single | double

Argumentos de salida

contraer todo

Valores interpolados, devueltos como escalar, vector, matriz o arreglo. El tamaño de vq depende de la forma de v y xq.

Forma de vForma de xqTamaño de VqEjemplo
VectorVectorsize(xq)Si size(v) = [1 100]
y size(xq) = [1 500],
size(vq) = [1 500].
VectorMatriz
o arreglo ND
size(xq)Si size(v) = [1 100]
y size(xq) = [50 30],
size(vq) = [50 30].
Matriz
o arreglo ND
Vector[length(xq) size(v,2),...,size(v,n)]Si size(v) = [100 3]
y size(xq) = [1 500],
size(vq) = [500 3].
Matriz
o arreglo ND
Matriz
o arreglo ND
[size(xq,1),...,size(xq,n),... size(v,2),...,size(v,m)]Si size(v) = [4 5 6]
y size(xq) = [2 3 7],
size(vq) = [2 3 7 5 6].

Polinomio por tramos, devuelto como estructura que puede pasar a la función ppval para evaluarla.

Más acerca de

contraer todo

Interpolación de Akima y por splines

El algoritmo de Akima para interpolación unidimensional, descrito en [1] y [2], lleva a cabo una interpolación cúbica para generar polinomios por tramos con derivadas continuas de primer orden (C1). El algoritmo conserva la pendiente y evita ondulaciones en regiones planas. Una región plana se produce siempre que hay tres o más puntos colineales consecutivos, que el algoritmo conecta con una línea recta. Para garantizar que la región entre dos puntos de datos es plana, introduzca un punto de datos adicional entre esos dos puntos.

Cuando se encuentran dos regiones planas con distintas pendientes, la modificación llevada a cabo en el algoritmo de Akima da más importancia al lado donde la pendiente está más cerca de cero. Esta modificación da prioridad al lado que está más cerca de la horizontal, lo cual es más intuitivo y evita el rebasamiento (el algoritmo de Akima original da la misma importancia a los puntos de ambos lados, dividiendo así la ondulación de modo uniforme).

El algoritmo de splines, por otra parte, lleva a cabo una interpolación cúbica para generar polinomios por tramos con derivadas continuas de segundo orden (C2). El resultado es comparable a una interpolación normal de polinomios, pero es menos vulnerable a grandes oscilaciones entre puntos de datos para grados elevados. De todas formas, este método puede ser vulnerable a rebasamientos y oscilaciones entre puntos de datos.

En comparación con el algoritmo de splines, el algoritmo de Akima genera menos ondulaciones y es más adecuado para lidiar con cambios rápidos entre regiones planas. Esta diferencia se ilustra a continuación utilizando datos de prueba que conectan varias regiones planas.

Plot of 1-D test data with multiple flat regions. The spline algorithm produces undulations in the flat regions, while the Akima algorithm smoothly connects the points.

Referencias

[1] Akima, Hiroshi. "A new method of interpolation and smooth curve fitting based on local procedures." Journal of the ACM (JACM) , 17.4, 1970, pp. 589-602.

[2] Akima, Hiroshi. "A method of bivariate interpolation and smooth surface fitting based on local procedures." Communications of the ACM , 17.1, 1974, pp. 18-20.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a

expandir todo

Consulte también

| | |