Interpolación de datos 1D (búsqueda en tabla)
contraer todo en la página
Sintaxis
vq = interp1(x,v,xq)
vq = interp1(x,v,xq,method)
vq = interp1(x,v,xq,method,extrapolation)
vq = interp1(v,xq)
vq = interp1(v,xq,method)
vq = interp1(v,xq,method,extrapolation)
pp = interp1(x,v,method,'pp')
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
Interpolación de función seno muestreada de forma imprecisa
Abrir script en vivo
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.
figurevq1 = interp1(x,v,xq);plot(x,v,'o',xq,vq1,':.');xlim([0 2*pi]);title('(Default) Linear Interpolation');
Ahora evalúe v
en los mismos puntos utilizando el método 'spline'
.
figurevq2 = interp1(x,v,xq,'spline');plot(x,v,'o',xq,vq2,':.');xlim([0 2*pi]);title('Spline Interpolation');
Interpolación sin especificar puntos
Abrir script en vivo
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.
figureplot((1:9),v,'o',xq,vq,'*');legend('v','vq');
Interpolación de valores complejos
Abrir script en vivo
Defina un conjunto de puntos de muestra.
x = 1:10;
Defina los valores de la función, , 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.
figureplot(x,real(v),'*r',xq,real(vq),'-r');hold onplot(x,imag(v),'*b',xq,imag(vq),'-b');
Interpolación de fechas y horas
Abrir script en vivo
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')
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 onplot(xq,V,'r')
Extrapolación utilizando dos métodos distintos
Abrir script en vivo
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.
Designar un valor constante para todas las consultas fuera del dominio de x
Abrir script en vivo
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
Interpolar varios conjuntos de datos en una pasada
Abrir script en vivo
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');figureplot(x,v,'o',xq,vq);h = gca;h.XTick = -5:5;
Los círculos en la gráfica representan v
, y las líneas continuas representan vq
.
Argumentos de entrada
contraer todo
x
— Puntos de muestra
vector
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 alength(v)
.Si
v
es un arreglo,length(x)
debe ser igual asize(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
v
— Valores de muestra
vector | matriz | arreglo
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: Sí
xq
— Puntos de consulta
escalar | vector | matriz | arreglo
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
method
— Método de interpolación
'linear'
(predeterminado) | 'nearest'
| 'next'
| 'previous'
| 'pchip'
| 'cubic'
| 'v5cubic'
| 'makima'
| 'spline'
Método de interpolación, especificado como una de las opciones de esta tabla.
Método | Descripción | Continuidad | Comentarios |
---|---|---|---|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| Convolución cúbica utilizada en MATLAB® 5. | C1 |
|
| Igual que | C1 | |
| 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 |
|
| 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 |
|
extrapolation
— Estrategia de extrapolación
'extrap'
| valor escalar
Estrategia de extrapolación, especificada como 'extrap'
o valor escalar real.
Especifique
'extrap'
cuando desee queinterp1
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
vq
— Valores interpolados
escalar | vector | matriz | arreglo
Valores interpolados, devueltos como escalar, vector, matriz o arreglo. El tamaño de vq
depende de la forma de v
y xq
.
Forma de v | Forma de xq | Tamaño de Vq | Ejemplo |
---|---|---|---|
Vector | Vector | size(xq) | Si size(v) = [1 100] y size(xq) = [1 500] , size(vq) = [1 500] . |
Vector | Matriz 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] . |
pp
— Polinomio por tramos
estructura
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.
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
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
El argumento de entrada
x
(puntos de muestra) debe ser estrictamente creciente o decreciente. Los índices no se reordenan.Si el argumento de entrada
v
(valores de muestra) es un vector de longitud variable (1 por:
o:
por 1), la forma de la salidavq
coincide con la forma en MATLAB.Si el argumento de entrada
v
es de tamaño variable, no es un vector de longitud variable y se convierte en un vector fila en tiempo de ejecución, se produce un error.Si los valores de muestra o los puntos de consulta contienen
Inf
o-Inf
, es posible que la salida del código generado no coincida con la salida en MATLAB.Si el argumento de entrada
xq
(puntos de consulta) es de tamaño variable, no es un vector de longitud variable y se convierte en un vector fila o en un vector columna en tiempo de ejecución, se produce un error.Consulte Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder).
Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.
Notas y limitaciones de uso:
El argumento de entrada
x
(puntos de muestra) debe ser estrictamente creciente o decreciente. Los índices no se reordenan.Si el argumento de entrada
v
(valores de muestra) es un vector de longitud variable (1 por:
o:
por 1), la forma de la salidavq
coincide con la forma en MATLAB.Si el argumento de entrada
v
es de tamaño variable, no es un vector de longitud variable y se convierte en un vector fila en tiempo de ejecución, se produce un error.Si el argumento de entrada
xq
(puntos de consulta) es de tamaño variable, no es un vector de longitud variable y se convierte en un vector fila o en un vector columna en tiempo de ejecución, se produce un error.Consulte Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder).
Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool
o acelere código con Parallel Computing Toolbox™ ThreadPool
.
Esta función es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en un entorno basado en subprocesos.
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
Notas y limitaciones de uso:
No se admiten los métodos de interpolación
'pchip'
y'makima'
.El método de interpolación
'spline'
no es compatible con valores de muestrav
que contengan valoresNaN
.
Para obtener más información, consulte Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Arreglos distribuidos
Realice particiones de arreglos grandes por toda la memoria combinada de su cluster mediante Parallel Computing Toolbox™.
Esta función es totalmente compatible con los arreglos distribuidos. Para obtener más información, consulte Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Historial de versiones
Introducido antes de R2006a
expandir todo
R2020b: El método 'cubic'
de interp1
lleva a cabo una convolución cúbica
En la versión R2020b, el método de interpolación 'cubic'
de interp1
lleva a cabo una convolución cúbica. Los métodos de interpolación 'v5cubic'
y 'cubic'
llevan a cabo ahora el mismo tipo de interpolación, que es consistente con el comportamiento de interp2
, interp3
y interpn
. El método de interpolación de convolución cúbica está previsto para datos espaciados uniformemente y recurre a la interpolación 'spline'
en el caso de datos espaciados de forma irregular.
En versiones anteriores, 'cubic'
era lo mismo que 'pchip'
y solo 'v5cubic'
llevaba a cabo la convolución cúbica.
Consulte también
interp2 | interp3 | interpn | griddedInterpolant
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office