Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Interpolando datos Cuadriparados

Representación de datos gridded

Representación de rejilla

En este ejemplo se muestra cómo crear una cuadrícula 2-D mediante y.meshgridndgrid

En MATLAB®, significa datos en una cuadrícula.gridded dataordered Puede entender los datos ordenados pensando en cómo MATLAB almacena los datos en matrices.

Defina algunos datos.

A = gallery('uniformdata',[3 5],0)
A = 3×5

    0.9501    0.4860    0.4565    0.4447    0.9218
    0.2311    0.8913    0.0185    0.6154    0.7382
    0.6068    0.7621    0.8214    0.7919    0.1763

MATLAB almacena los datos en una matriz. Se puede pensar en como un conjunto de lugares para los elementos que se ordenan por los índices de la matriz.A Los índices lineales de son:A

<math display="block">
<mrow>
<mrow>
<mo>[</mo>
<mrow>
<mtable columnalign="center center center center center center center center center center center center center center center center center center center center">
<mtr>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>4</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>7</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow>
<mn>1</mn>
<mn>0</mn>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow>
<mn>1</mn>
<mn>3</mn>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mn>2</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>5</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>8</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow>
<mn>1</mn>
<mn>1</mn>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow>
<mn>1</mn>
<mn>4</mn>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mn>3</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>6</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>9</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow>
<mn>1</mn>
<mn>2</mn>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow>
<mn>1</mn>
<mn>5</mn>
</mrow>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
<mo>]</mo>
</mrow>
</mrow>
</math>

Cualquier elemento de la matriz se puede recuperar mediante la indexación, es decir, pidiendo el elemento en ese lugar en la matriz. El elemento Ith se recupera por.AA(i)

Recupere el elemento 7º en.A

A(7)
ans = 0.4565 

Para una matriz m-by-n, puede encontrar los elementos de columna adyacentes al elemento iésimo compensando i por 1. Para buscar los elementos de fila adyacentes al elemento iésimo, equidistanciar i por m.

<math display="block">
<mrow>
<mtable columnalign="center center center center center center center center center center center center center center center center center center center center">
<mtr>
<mtd>
<mrow>
<mrow></mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow>
<mi>i</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow></mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mrow>
<mi>i</mi>
<mo>-</mo>
<mi>m</mi>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>i</mi>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow>
<mi>i</mi>
<mo>+</mo>
<mi>m</mi>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mrow></mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow>
<mi>i</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</mrow>
</mtd>
<mtd>
<mrow>
<mrow></mrow>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</math>

Recupere los elementos de columna adyacentes a.A(7)

A(6),A(8)
ans = 0.7621 
ans = 0.0185 

MATLAB utiliza una idea similar para crear cuadrículas de datos. Una cuadrícula no es solo un conjunto de puntos que cumplen ciertas propiedades geométricas. Más bien, se basa en una relación ordenada entre los puntos de la cuadrícula.gridded data set La información de adyacencia disponible en la estructura de cuadrícula es muy útil para muchas aplicaciones y en particular la interpolación basada en cuadrículas.

MATLAB proporciona dos funciones para crear cuadrículas:

  • crea cuadrículas 2-D y 3-D que son ejes cartesianos alineados.meshgrid Para crear una cuadrícula 2-D, la sintaxis es Where es un vector de longitud, y es un vector de longitud. se replica para formar la matriz, y se replica para formar otra por matriz. y representan las coordenadas de los puntos de rejilla.[X,Y] = meshgrid(xgv, ygv)xgvmygvnmeshgridxgvnmXygvnmYXY Las filas de están alineadas con el eje horizontal, y las columnas de están alineadas con el eje negativo.XXYY

  • crea cuadrículas N-D que están alineadas en el espacio de matriz.ndgrid En el espacio de matriz, los ejes son fila, columna, página, etc. La sintaxis de llamada es donde están los vectores que abarcan la cuadrícula en cada dimensión. son matrices de salida que se pueden utilizar para evaluar funciones de varias variables y para la interpolación multidimensional.[X1, X2, X3,...,Xn] = ndgrid(x1gv, x2gv, x3gv,...,xngv)x1gv,x2gv,x3gv,...,xngvX1,X2,X3,...,Xn

Se utiliza para crear una rejilla alineada de eje 2-D a partir de dos vectores y.meshgridxgvygv

xgv = [1 2 3]; ygv = [1 2 3 4 5]; [X,Y] = meshgrid(xgv, ygv)
X = 5×3

     1     2     3
     1     2     3
     1     2     3
     1     2     3
     1     2     3

Y = 5×3

     1     1     1
     2     2     2
     3     3     3
     4     4     4
     5     5     5

Ahora se usa para crear una cuadrícula alineada con el espacio 2-D a partir de los mismos dos vectores y.ndgridxgvygv

[X1,X2] = ndgrid(xgv,ygv)
X1 = 3×5

     1     1     1     1     1
     2     2     2     2     2
     3     3     3     3     3

X2 = 3×5

     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5

Fíjate que es la transposición de.ndgridX1meshgridX Lo mismo es cierto para y.X2Y

Para un conjunto determinado de entradas, el y las funciones producirán cuadrículas con exactamente las mismas coordenadas.meshgridndgrid La única diferencia entre sus salidas es el formato de las matrices de coordenadas. Trace ambas salidas y vea que son las mismas.

figure() [X1_ndgrid,X2_ndgrid] = ndgrid(1:3,1:5); Z = zeros(3,5); mesh(X1_ndgrid,X2_ndgrid,Z,'EdgeColor','black') axis equal;  % Set the axis labeling and title h1 = gca; h1.XTick = [1 2 3]; h1.YTick = [1 2 3 4 5]; xlabel('ndgrid Output')

figure() [X_meshgrid,Y_meshgrid] = meshgrid(1:3, 1:5); mesh(X_meshgrid,Y_meshgrid,Z','EdgeColor','black') axis equal;  % Set the axis labeling and title h2 = gca; h2.XTick = [1 2 3]; h2.YTick = [1 2 3 4 5]; xlabel('meshgrid Output')

Dependiendo de cómo pretenda usar su cuadrícula, puede preferir un formato u otro. Algunas funciones de MATLAB pueden requerir que los datos tengan un formato, mientras que otros pueden requerir un formato.meshgridndgrid

Conversión entre formatos de rejilla.  Para convertir una salida de rejilla en 2-D del formato, transponer las matrices de coordenadas: también puede utilizar la función.meshgridndgrid

[X_meshgrid,Y_meshgrid] = meshgrid(1:3, 1:5); [X1_ndgrid,X2_ndgrid] = ndgrid(1:3,1:5);  isequal(X_meshgrid',X1_ndgrid) ans =      1 isequal(Y_meshgrid',X2_ndgrid) ans =      1
permute Para convertir un 3-D a, transponer cada página de la matriz de coordenadas.
isequal(permute(X_meshgrid,[2 1]),X1_ndgrid) ans =      1
meshgridndgrid Para una matriz determinada, intercambia las filas y columnas, y el efecto neto es la transposición de cada página:my_arraypermute(my_array, [2 1 3])
[X_meshgrid,Y_meshgrid,Z_meshgrid] = meshgrid(1:3, 1:5, [1 2]); [X1_ndgrid,X2_ndgrid,X3_ndgrid] = ndgrid(1:3,1:5, [1 2]);  isequal(permute(X_meshgrid,[2 1 3]),X1_ndgrid) ans =      1  isequal(permute(Y_meshgrid,[2 1 3]),X2_ndgrid) ans =      1  isequal(permute(Z_meshgrid,[2 1 3]),X3_ndgrid) ans =      1

Vectores de rejilla.  Se llama a las entradas que se pasan a las funciones de cuadrícula.vectores de rejilla Los vectores de rejilla definen implícitamente la rejilla. Consideremos dos vectores, y.x1gv = (1:3)x2gv = (1:5) Puede pensar en estos vectores como un conjunto de coordenadas en la dirección y un conjunto de coordenadas en la dirección, así:x1x2

Cada flecha apunta a una ubicación. Puede utilizar estos dos vectores para definir un conjunto de puntos de rejilla, donde se da un conjunto de coordenadas y el otro conjunto de coordenadas es dado por.x1gvx2gv Cuando los vectores de rejilla se replican, forman dos matrices de coordenadas que componen:cuadrícula completa

Las cuadrículas monotónicas y no Monónicas.  Los vectores de la rejilla de entrada pueden ser o.monotónicano monótona Los vectores monotónicos contienen valores que aumentan en esa dimensión o disminuyen en esa dimensión. Por el contrario, los vectores no monónicos contienen valores que fluctúan. Si el vector de la rejilla de entrada es no monotónico, por ejemplo, genera lo siguiente: los vectores de rejilla deben ser monónicos si se pretende pasar la rejilla a otras funciones.[2 4 6 8 3 1]ndgrid

[X1,X2] = ndgrid([2 4 6 3 1]) X1 =      2     2     2     2     2      4     4     4     4     4      6     6     6     6     6      3     3     3     3     3      1     1     1     1     1  X2 =      2     4     6     3     1      2     4     6     3     1      2     4     6     3     1      2     4     6     3     1      2     4     6     3     1
MATLAB®

Las rejillas uniformes y no uniformes.  Una cuadrícula es aquella en la que todos los puntos vecinos de una dimensión dada tienen el mismo espaciado.Uniforme Por ejemplo, es un uniforme con un espaciado de 2 unidades en cada dimensión.[X1, X2] = ndgrid([1 3 5 9],[11 13 15])

No es necesario que el espaciado de una rejilla uniforme sea igual en todas las cotas. Por ejemplo, se considera uniforme aunque el espaciado en y son diferentes.[X1, X2] = ndgrid([1 2 3 4],[11 13 15])X1X2

Una rejilla cuyo espaciado varía dentro de cualquier cota es una rejilla.no uniforme Por ejemplo, crea una cuadrícula no uniforme porque el espaciado varía a lo largo de la primera dimensión.[X1, X2] = ndgrid([1 5 6 9],[11 13 15])

UniformeUniformeNo uniforme

Tipos de representaciones de rejilla

permite representar una rejilla en una de las tres representaciones: rejilla completa, rejilla compacta o rejilla por defecto.MATLAB La rejilla compacta y la rejilla por defecto se utilizan principalmente para mayor comodidad y mayor eficiencia.

Full Grid.  A es uno en el que los puntos se definen explícitamente.cuadrícula completa Las salidas de y definen una rejilla completa.ndgridmeshgrid

Compact Grid.  La definición explícita de cada punto en una cuadrícula es costosa en términos de memoria. La representación es una manera de prescindir de la sobrecarga de memoria de una cuadrícula completa.rejilla compacta La representación de cuadrícula compacta almacena solo los vectores de cuadrícula en lugar de la cuadrícula completa. (Para obtener información sobre cómo la clase utiliza la representación de cuadrícula compacta, vea.)griddedInterpolantLa interpolación con la clase griddedInterpolant

Cuadrícula predeterminada.  En muchos casos, cuando se analizan datos, se preocupan tanto las distancias entre los puntos de la cuadrícula como su valor. Por ejemplo, un conjunto de datos puede representar precipitaciones en puntos específicos de un área geográfica. En este caso, le importaría el valor en cada punto de rejilla y la distancia entre un punto y su vecino. En otros casos, es posible que solo se preocupe por el valor de un punto determinado y no por las distancias relativas. Por ejemplo, podría estar trabajando con datos de entrada de una resonancia magnética donde la distancia entre los puntos es completamente uniforme. En este caso, le interesan los valores de los puntos, pero puede estar seguro de una cuadrícula completamente uniforme. En este caso, la representación es útil.cuadrícula predeterminada Almacena el valor en un punto de rejilla explícitamente y crea coordenadas de punto de rejilla implícitamente.representación de cuadrícula predeterminada

Este ejemplo muestra cómo puede usar la cuadrícula predeterminada en lugar de la cuadrícula completa para generar un trazado.

Cree una rejilla y una función que desee trazar.

[X,Y] = meshgrid(11:15,11:16); Z = X.^2 + Y.^2;

Use la cuadrícula completa con la que ha creado mediante y.meshgridXY

figure surf(X,Y,Z) title('Full Grid')

Por el contrario, MATLAB crea una cuadrícula predeterminada en lugar de usar la cuadrícula completa.

figure surf(Z) title('Default Grid')

Observe la diferencia en la escala de los ejes. Al trazar la rejilla completa, los ejes tienen rangos de 11 a 15 y de 10 a 16 respectivamente.XY Al trazar la rejilla por defecto, el eje-y-tiene rangos de 1 a m y de 1 a n, donde es m-by-n.XYZ

Técnicas de aproximación de rejilla

En algunos casos, es posible que necesite aproximar una cuadrícula para sus datos. Una cuadrícula aproximada puede ser idealizada por una cuadrícula estándar eligiendo un conjunto apropiado de vectores de rejilla.MATLAB Por ejemplo, una rejilla puede tener puntos que se encuentran a lo largo de líneas curvas. Un conjunto de datos como este puede ocurrir si sus datos están basados en longitud y latitud:

En este caso, aunque los datos de entrada no se pueden cuadricular directamente, puede aproximarse líneas rectas de rejilla a intervalos apropiados:

También puede usar el.cuadrícula predeterminada

Degenerate Grid.  A es un caso especial de rejilla donde una o más dimensiones de la rejilla son singletons.rejilla degenerada Una dimensión singleton puede ser interna, como en este ejemplo: o una dimensión singleton puede ser trailing: puede crear una cuadrícula degenerada si está intentando tomar un trozo de un conjunto de datos más grande.7:7

[X1,X2,X3] = ndgrid(1:2:10,7:7,1:3:15);
[X1,X2,X3] = ndgrid(1:2:10,1:3:15,7:7);
Por ejemplo, es posible que desee analizar solo una porción de una resonancia magnética 3-D. En este caso, necesitará una porción de datos de una cuadrícula multidimensional, como el sector punteado en la siguiente figura:

Si utiliza la indexación para extraer los datos deseados, la rejilla resultante se degenera en la cota:X3

[X1,X2,X3] = ndgrid(1:3);  X1_slice = X1(:,:,2) X1_slice =      1     1     1      2     2     2      3     3     3  X2_slice = X2(:,:,2) X2_slice =      1     2     3      1     2     3      1     2     3  X3_slice = X3(:,:,2) X3_slice =      2     2     2      2     2     2      2     2     2

El concepto de cuadrícula de datos es muy importante para comprender las formas en que se realiza la interpolación basada en cuadrícula.MATLAB

La interpolación basada en cuadrícula

En la interpolación basada en cuadrícula, los datos que se interpolan se representan mediante una cuadrícula ordenada. Por ejemplo, una disposición de las mediciones de temperatura sobre una superficie plana rectangular a intervalos de 1 cm de arriba a abajo verticalmente y de izquierda a derecha horizontalmente se considera datos cuadricograbados en 2-D. La interpolación basada en rejilla proporciona una forma eficaz de aproximar la temperatura en cualquier ubicación entre los puntos de rejilla.

Ventajas de utilizar la interpolación basada en rejilla

La interpolación basada en cuadrícula proporciona ahorros significativos en la sobrecarga computacional porque la estructura cuadriculada permite ubicar muy rápidamente un punto de consulta y sus vecinos adyacentes.MATLAB Para entender cómo funciona esto, tenga en cuenta los siguientes puntos en una cuadrícula 1-D:

Las líneas que conectan puntos adyacentes representan la de la rejilla.Células La primera celda se produce entre y, el segundo se produce entre y, y así sucesivamente.x = 1x = 3x = 3x = 5 Cada número representa una coordenada en la cuadrícula. Si desea consultar la cuadrícula en, tendría que usar la interpolación porque 6 no está definido explícitamente en la cuadrícula.x = 6 Puesto que esta cuadrícula tiene un espaciado uniforme de 2, puede reducir la ubicación del punto de consulta con una única División de enteros ().6/2 = 3 Esto le indica que el punto está en la 3ª celda de la cuadrícula. Ubicar una celda en una cuadrícula 2-D implica realizar esta operación una vez en cada dimensión. Esta operación se denomina a y usa esta técnica solo cuando los datos se organizan en una cuadrícula uniforme.búsqueda rápidaMATLAB

Esta búsqueda rápida localiza eficazmente la celda que contiene un punto de consulta.Xq Una búsqueda binaria procede de la siguiente manera:

  1. Localice el punto de rejilla central.

  2. Compare con el punto en el centro de la rejilla.Xq

  3. Si es menor que el punto encontrado en el centro, elimine todos los puntos de rejilla mayores que el punto central de la búsqueda.Xq Del mismo modo, si es mayor que la encontrada en el centro, eliminamos todos los puntos de rejilla que son menores que el punto central.Xq Tenga en cuenta que al hacer esto, hemos reducido el número de puntos que debemos buscar por la mitad.

  4. Busque el centro de los puntos de rejilla restantes y repita desde el paso 2 hasta que se quede con un punto de rejilla a cada lado de la consulta. Estos dos puntos marcan el límite de la celda que contiene.Xq

Para ilustrar el poder de las búsquedas binarias, considere el siguiente ejemplo. Antes de la llegada de las autorizaciones electrónicas de tarjetas de crédito, la única protección que tenían los comerciantes contra las compras fraudulentas de tarjetas de crédito era comparar el número de cuenta en la tarjeta de crédito de cada cliente con una lista de números de cuenta "malos". Estas listas fueron encuadernadas con decenas de miles de números de tarjetas organizados en orden ascendente. ¿Cuántas comparaciones se requieren para buscar a través de una lista de 10.000 números de cuenta para una venta? Resulta que para cualquier lista de artículos ordenados, el número máximo de comparaciones no será más que el número de veces que puede dividir la lista por la mitad, o.nlog2(n) Por lo tanto, la búsqueda de la tarjeta de crédito no tomará más de o alrededor de 13 comparaciones.log2(10e3) Eso es bastante impresionante si consideras cuántas comparaciones se necesitaría para realizar una búsqueda secuencial.

Por el contrario, considere un problema con un conjunto de datos dispersos.

x = rand(20,1); y = rand(20,1); scatter(x,y)

Para encontrar los puntos cercanos a un punto de consulta requeriría muchas más operaciones. Si los datos se pueden aproximar como una cuadrícula, la interpolación basada en cuadrícula proporcionará ahorros sustanciales en el uso de computación y memoria.

Si sus datos están dispersos, puede utilizar las herramientas detalladas en.Interpolando datos dispersos

Interpolación versus ajuste

Los métodos de interpolación disponibles en crear funciones interpolantes que pasan a través de los puntos de datos de ejemplo.MATLAB Si tuviera que consultar la función de interpolación en una ubicación de ejemplo, podría recuperar el valor en ese punto de datos de ejemplo. Por el contrario, los algoritmos de empalme de curva y superficie no pasan necesariamente por los puntos de datos de muestra.

Métodos de interpolación

La interpolación basada en rejilla ofrece varios métodos diferentes para la interpolación. Al elegir un método de interpolación, tenga en cuenta que algunos requieren más memoria o tiempo de cálculo más largo que otros. Sin embargo, es posible que deba negociar estos recursos para lograr la suavidad deseada en el resultado. La tabla siguiente proporciona una visión general de los beneficios, las compensaciones y los requisitos para cada método.

MétodoDescripciónContinuidadUso y rendimiento de memoriaRequisitos
Vecino más cercanoEl valor interpolado en un punto de consulta es el valor en el punto de cuadrícula de ejemplo más cercano. Discontinuo
  • Los requisitos de memoria modestos

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

  • Requiere 2 puntos de rejilla en cada cota.

Próximo vecinoEl valor interpolado en un punto de consulta es el valor en el siguiente punto de cuadrícula de ejemplo.Discontinuo

Los mismos requisitos de memoria y tiempo de cálculo que el vecino más cercano.

  • Disponible solo para interpolación 1D.

  • Requiere al menos 2 puntos de rejilla.

Vecino anteriorEl valor interpolado en un punto de consulta es el valor en el punto de cuadrícula de ejemplo anterior.Discontinuo

Los mismos requisitos de memoria y tiempo de cálculo que el vecino más cercano.

  • Disponible solo para interpolación 1D.

  • Requiere al menos 2 puntos de rejilla.

LinealEl valor interpolado en un punto de consulta se basa en la interpolación lineal de los valores en puntos de rejilla adyacentes en cada dimensión respectiva. C0
  • Requiere más memoria que el vecino más cercano.

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

  • Requiere al menos 2 puntos de rejilla en cada cota.

PchipEl valor interpolado en un punto de consulta se basa en una interpolación cúbica de forma de pieza que preserva los valores en puntos de rejilla adyacentes.C1
  • Requiere más memoria que lineal.

  • Requiere más tiempo de cálculo que lineal.

  • Disponible solo para interpolación 1D.

  • Requiere al menos 4 puntos de rejilla.

CúbicosEl valor interpolado en un punto de consulta se basa en la interpolación cúbica de los valores en puntos de rejilla adyacentes en cada dimensión respectiva.C1
  • Requiere más memoria que lineal.

  • Requiere más tiempo de cálculo que lineal.

  • Grid debe tener un espaciado uniforme, aunque el espaciado en cada dimensión no tiene que ser el mismo.

  • Requiere al menos 4 puntos en cada dimensión.

Akima modificadaEl valor interpolado en un punto de consulta se basa en una función por tramos de polinomios con un grado como máximo de tres evaluados utilizando los valores de los puntos de rejilla adyacentes en cada dimensión respectiva. La fórmula de Akima se modifica para evitar el exceso de brotes.C1
  • Requisitos de memoria similares a spline.

  • Requiere más tiempo de cálculo que cúbico, pero normalmente menor que spline.

  • Requiere al menos 2 puntos de rejilla en cada dimensión

SplineEl valor interpolado en un punto de consulta se basa en una interpolación cúbica de los valores en puntos de rejilla adyacentes en cada dimensión respectiva.C2
  • Requiere más memoria que cúbica.

  • Requiere más tiempo de cálculo que cúbico.

  • Requiere 4 puntos en cada dimensión.

Esta figura tiene algunas comparaciones visuales de los diferentes métodos de interpolación para los datos 1-D.

Comparación de métodos de interpolación

proporciona compatibilidad para la interpolación basada en cuadrícula de varias maneras:MATLAB

  • La familia de funciones:,,, y.interpinterp1interp2interp3interpn

  • La clase.griddedInterpolant

La familia de funciones y la compatibilidad con la interpolación basada en rejilla N-D.interpgriddedInterpolant Sin embargo, hay beneficios de memoria y rendimiento al usar la clase sobre las funciones.griddedInterpolantinterp Además, la clase proporciona una única interfaz coherente para trabajar con datos cuadriparados en cualquier número de dimensiones.griddedInterpolant

Interpolación con la familia de funciones interp

La función interp1

En este ejemplo se muestra cómo se puede usar la función para interpolar un conjunto de valores de ejemplo mediante el método.interp1'pchip'

La función realiza la interpolación unidimensional.interp1 Su forma más general es:

Vq = interp1(X,V,Xq,method)

donde hay un vector de coordenadas y es un vector que contiene los valores en esas coordenadas. es un vector que contiene los puntos de consulta en los que se interpolar y, opcionalmente, especifica cualquiera de los cuatro métodos de interpolación:,,, o.XVXqmethod'nearest''linear''pchip''spline'

Cree un conjunto de puntos de rejilla 1-D y los valores de muestra correspondientes.XV

X = [1 2 3 4 5]; V = [12 16 31 10 6];

Interpolar sobre intervalos más finos con espaciado 0,1.

Xq = (1:0.1:5); Vq = interp1(X,V,Xq,'pchip');

Graficar las muestras y los valores interpolados.

plot(X,V,'o'); hold on plot(Xq,Vq,'-'); legend('samples','pchip'); hold off

Extrapolación 1-D con interp1

En este ejemplo se muestra cómo utilizar la opción para interpolar más allá del dominio de los puntos de muestra.'extrap'

Defina los puntos de muestreo y los valores.

X = [1 2 3 4 5]; V = [12 16 31 10 6];

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

Xq = (0:0.1:6); Vq = interp1(X,V,Xq,'pchip','extrap');

Graficar los resultados.

figure plot(X,V,'o'); hold on plot(Xq,Vq,'-'); legend('samples','pchip'); hold off

En un enfoque alternativo, puede introducir puntos adicionales para obtener más control sobre el comportamiento en las regiones extrapoladas. Por ejemplo, puede restringir la curva para que permanezca plana en la región extrapolada extendiendo el dominio con valores repetidos.

X = [0 1 2 3 4 5 6]; V = [12 12 16 31 10 6 6];

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

Xq = (-1:0.1:7);

Interpolar usando.'pchip' Puede omitir la opción porque es el valor predeterminado con el, y métodos.'extrap''pchip''makima''spline'

Vq = interp1(X,V,Xq,'pchip');

Graficar los resultados.

figure plot(X,V,'o'); hold on plot(Xq,Vq,'-'); legend('samples','pchip'); hold off

La función interp2

En este ejemplo se muestra cómo se puede usar la función para interpolar la función muestreada de forma gruesa sobre una cuadrícula más fina.interp2peaks

Las funciones y realizan la interpolación de dos y tres dimensiones respectivamente, e interpolan las cuadrículas en el formato.interp2interp3meshgrid La sintaxis de llamada para tiene la forma general:interp2

Vq = interp2(X,Y,V,Xq,Yq,method)

Dónde y son matrices de coordenadas que definen una cuadrícula en formato, y es una matriz que contiene los valores en los puntos de cuadrícula. y son matrices que contienen las coordenadas de los puntos de consulta en los que se interpolar. especifica opcionalmente cualquiera de los cuatro métodos de interpolación:,,, o.XYmeshgridVXqYqmethod'nearest''linear''cubic''spline'

Los puntos de rejilla que componen y deben ser monótona creciente y deben ajustarse al formato.XYmeshgrid

Cree una rejilla gruesa y los valores de muestra correspondientes.

[X,Y] = meshgrid(-3:1:3); V = peaks(X,Y);

Trace los valores de muestra.

surf(X,Y,V) title('Sample Grid');

Genere una rejilla más fina para la interpolación.

[Xq,Yq] = meshgrid(-3:0.25:3);

Se usa para interpolar en los puntos de consulta.interp2

Vq = interp2(X,Y,V,Xq,Yq,'linear');

Graficar los resultados.

surf(Xq,Yq,Vq); title('Refined Grid');

La función interp3

En este ejemplo se muestra cómo utilizar para interpolar una función 3D en un único punto de consulta y compararla con el valor generado por una expresión analítica.interp3

funciona de la misma manera que con la excepción de que se necesitan dos argumentos adicionales: uno para la tercera dimensión en la cuadrícula de muestra y el otro para la tercera dimensión en los puntos de consulta,interp3interp2

.Vq = interp3(X,Y,Z,V,Xq,Yq,Zq,method)

Como es el caso con, los puntos de rejilla que se suministran deben estar aumentando de forma monótona y deben ajustarse al formato.interp2interp3meshgrid

Defina una función que genere valores para la entrada X, y y Z.

generatedvalues = @(X,Y,Z)(X.^2 + Y.^3 + Z.^4);

Cree los datos de ejemplo.

[X,Y,Z] = meshgrid((-5:.25:5)); V = generatedvalues(X,Y,Z);

Interpolar en un punto de consulta específico.

Vq = interp3(X,Y,Z,V,2.35,1.76,0.23,'cubic')
Vq = 10.9765 

Compare con el valor generado por la expresión analítica.Vq

V_actual = generatedvalues(2.35,1.76,0.23)
V_actual = 10.9771 

La función interpn

En este ejemplo se muestra cómo se puede usar la función para interpolar una función muestreada de forma gruesa sobre una cuadrícula más fina mediante el método.interpn'cubic'

La función realiza la interpolación n-dimensional en las cuadrículas que están en el formato.interpnndgrid Su forma más general es:

Vq = interpn(X1,X2,X3,...Xn,V,Y1,Y2,Y3,...,Yn,method)

donde hay matrices de coordenadas que definen una cuadrícula en formato, y es una matriz que contiene los valores en los puntos de cuadrícula. son matrices que contienen las coordenadas de los puntos de consulta en los que se interpolar. especifica opcionalmente cualquiera de los cuatro métodos de interpolación:,,, o.X1,X2,X3,...,XnndgridVY1,Y2,Y3,...,Ynmethod'nearest''linear''cubic''spline'

Los puntos de rejilla que componen deben aumentar monótona y ajustarse al formato.X1,X2,X3,...Xnndgrid

Cree un conjunto de puntos de rejilla y los valores de muestra correspondientes.

[X1,X2] = ndgrid((-5:1:5)); R = sqrt(X1.^2 + X2.^2)+ eps; V = sin(R)./(R);

Trace los valores de muestra.

mesh(X1,X2,V) title('Sample Grid');

Cree una rejilla más fina para la interpolación.

[Y1,Y2] = ndgrid((-5:.5:5));

Interpolar sobre la rejilla más fina y trazar los resultados.

Vq = interpn(X1,X2,V,Y1,Y2,'cubic'); mesh(Y1,Y2,Vq) title('Refined Grid');

tiene una sintaxis alternativa: que permite interpolar sobre una cuadrícula que es un número entero de veces más fina que la cuadrícula de muestra.interpnVq = interpn(V,ntimes,method) En el código anterior, y consultó el Interpolante sobre una cuadrícula que contenía un punto adicional entre cada uno de los ejemplos.Y1Y2 El código siguiente muestra cómo puede lograr el mismo resultado con.ntimes=1

Interpolar sobre una rejilla más fina usando.ntimes=1

Vq = interpn(V,1,'cubic');

Graficar el resultado.

mesh(Vq) title('Refined Grid with NTIMES');

Observe que el trazado se escala de forma diferente que en el ejemplo anterior. Esto se debe a que llamamos y pasamos los valores solamente.mesh La función utiliza una cuadrícula predeterminada basada en las dimensiones de.meshVq Los valores de salida son los mismos en ambos casos.

También puede suministrar una cuadrícula no uniforme de puntos de consulta. Esto puede ser útil si está interesado en consultar el Interpolante con una resolución superior en una región de la cuadrícula. El código siguiente muestra cómo se puede hacer esto.

Interpolar sobre una rejilla sesgada.

[Y1, Y2] = ndgrid([-5 -4 -3 -2.5 -2 -1.5 -1.25 -1 -0.75 -0.5 -0.20 0]); Vq = interpn(X1,X2,V,Y1,Y2,'cubic');

Graficar el resultado.

mesh(Y1,Y2,Vq); title('Biased Grid');

La interpolación con la clase griddedInterpolant

Al igual que la función, la clase proporciona una interfaz única para la interpolación basada en cuadrícula en dimensiones.interpngriddedInterpolantn Sin embargo, ofrece los siguientes beneficios adicionales:griddedInterpolant

  • Ofrece mejoras sustanciales de rendimiento para las consultas repetidas al Interpolante.

  • Ofrece mejoras de rendimiento adicionales y ahorros en el consumo de memoria porque almacena los puntos de muestra como un.rejilla compacta

acepta datos de ejemplo que se ajustan al formato.griddedInterpolantndgrid Si desea crear un con datos, tendrá que convertir los datos al formato.griddedInterpolantmeshgridndgrid Vea para una demostración de cómo convertir 2-D y 3-D.Convertir los datos de mallgrid en el formato ndgridmeshgrids

La clase admite los que también son compatibles con:,,,,, y.griddedInterpolantmétodos de interpolacióninterpnnearestlinearpchipcubicmakimaspline Sin embargo ofrece un mayor rendimiento con menos sobrecarga.griddedInterpolant

La construcción del Interpolante

Una es una función que realiza la interpolación.interpolant Para crear el Interpolante, llame al constructor y pase los datos de ejemplo: la cuadrícula y los valores de ejemplo correspondientes.griddedInterpolant También puede especificar el método de interpolación si desea anular el método "lineal" predeterminado. La sintaxis de llamada tiene los siguientes formularios:

  • Para la interpolación 1-D, puede pasar, un conjunto de puntos y, un vector de la misma longitud que contiene los valores correspondientes.xv

    F = griddedInterpolant(x,v)

  • Para cotas superiores, puede suministrar una rejilla completa. especificar la cuadrícula como un conjunto de matrices-D.X1,X2,...,Xnnn Estas matrices se ajustan al formato y tienen el mismo tamaño que la matriz de ejemplo.ndgridV

     F = griddedInterpolant(X1,X2,...,Xn,V)

  • Si sabe que las distancias entre los puntos de muestreo adyacentes son uniformes, puede dejar que se cree una rejilla por defecto pasando sólo los puntos de muestreo.griddedInterpolantV

     F = griddedInterpolant(V)

  • También puede especificar las coordenadas de los datos de muestra como una cuadrícula compacta. La cuadrícula compacta se representa mediante un conjunto de vectores. Estos vectores, a continuación, se empaquetan en una matriz de celdas encerrándolos entre llaves; por ejemplo, donde los vectores definen las coordenadas de la rejilla en cada cota.{x1g,x2g,...,xng}x1g,x2g,...,xng

     F = griddedInterpolant({x1g,x2g,...,xng},V)

  • También puede especificar el método de interpolación como un argumento de entrada final con cualquiera de las sintaxis de llamada. Este ejemplo especifica la interpolación de vecino más cercano.

     F = griddedInterpolant({x1g,x2g,x3g},V,'nearest')

Consultar el Interpolante

El,,, se evalúa de la misma manera que se llamaría a una función.griddedInterpolantF Los puntos de consulta pueden estar dispersos o en una cuadrícula, y puede pasarlos de cualquiera de las siguientes maneras:F

  • Puede especificar una-por-matriz, que contiene puntos dispersos en las cotas.mnXqmn Los valores interpolados se devuelven como un vector.Vqm1

      Vq = F(Xq)

  • También puede especificar los puntos de consulta como una serie de vectores de columna de longitud.nx1q,x2q,...,xnqm Estos vectores representan puntos en dimensiones.mn Los valores interpolados se devuelven como un vector.Vqm1

     Vq = F(x1q,x2q,...,xnq)

  • Puede especificar los puntos de consulta como una serie de matrices de dimensiones que representan una cuadrícula completa.nn Las matrices tienen el mismo tamaño y se ajustan al formato.X1q,X2q,...,Xnqndgrid Los valores interpolados también tendrán el mismo tamaño.Vq

    Vq = F(X1q,X2q,...,Xnq)

  • También puede especificar los puntos de consulta como una cuadrícula compacta. son vectores que definen los puntos de rejilla en cada dimensión.x1gq,x2gq,...,xngq

    Vq = F({x1gq,x2gq,...,xngq})

    Por ejemplo, en 2-D:

    Vq = F({(0:0.2:10),(-5:0.5:5)});

Convertir los datos de mallgrid en el formato ndgrid

La clase acepta datos de ejemplo con formato.griddedInterpolantndgrid Si desea crear un con datos, primero debe convertirlo al formato.griddedInterpolantmeshgridndgrid

En el ejemplo siguiente se describen los pasos para convertir datos 2-D al formato.meshgridndgrid Comenzamos creando los valores de muestra correspondientes:meshgrid

[X,Y] = meshgrid(-2:.1:2,-1:.1:1); V=0.75*Y.^3-3*Y-2*X.^2;

Para convertir, y formatear, siga estos pasos:XYVndgrid

  1. Transponer cada matriz en la cuadrícula, así como los datos de ejemplo.

    X=X'; Y=Y'; V=V';
  2. Ahora cree el Interpolante.

    F = griddedInterpolant(X,Y,V);

Para convertir un 3-D, utilice la función.meshgridpermute De nuevo, empiece por crear los valores de muestra correspondientes:meshgrid

[X,Y,Z] = meshgrid(-5:5,-3:3,-10:10); V = X.^3 + Y.^2 + Z;

Para convertir, y formatear, siga estos pasos:XYZVndgrid

  1. Utilice la función para intercambiar las filas y columnas de cada matriz.permute El efecto neto será la transposición de cada página.

    P = [2 1 3]; X = permute(X,P); Y = permute(Y,P); Z = permute(Z,P); V = permute(V,P);

  2. Ahora cree el Interpolante.

    F = griddedInterpolant(X,Y,Z,V);

griddedInterpolant en una dimensión

En este ejemplo se muestra cómo crear y trazar un Interpolante 1-D mediante un método de interpolación cúbica.griddedInterpolant

Cree una rejilla gruesa y valores de muestra.

X = [1 2 3 4 5]; V = [12 6 15 9 6];

Construya el uso de un método de interpolación cúbica.griddedInterpolant

F = griddedInterpolant(X,V,'cubic')
F =    griddedInterpolant with properties:              GridVectors: {[1 2 3 4 5]}                  Values: [12 6 15 9 6]                  Method: 'cubic'     ExtrapolationMethod: 'cubic'  

La propiedad contiene la cuadrícula compacta que especifica las coordenadas de los valores de ejemplo.GridVectorsV La propiedad especifica el método de interpolación.Method Tenga en cuenta que hemos especificado cuando creamos.'cubic'F Si omite el argumento, se asignará el método de interpolación predeterminado.MethodlinearF

Puede acceder a cualquiera de las propiedades de la misma manera que accedería a los campos en un.Fstruct

F.GridVectors;          % Displays the grid vectors as a cell array F.Values;               % Displays the sample values F.Method;               % Displays the interpolation method

Interpolar sobre intervalos más finos con espaciado 0,1.

Xq = (1:0.1:5); Vq = F(Xq);

Graficar el resultado.

plot(X,V,'o'); hold on plot(Xq,Vq,'-'); legend('samples','Cubic Interpolation');

griddedInterpolant en dos dimensiones

Este ejemplo muestra cómo crear y trazar un Interpolante 2-D utilizando.griddedInterpolant

En dos dimensiones y superiores, puede especificar las coordenadas de la muestra como una cuadrícula compacta o una cuadrícula predeterminada.ndgrid En este ejemplo, suministraremos un.ndgrid

Cree una rejilla gruesa y valores de muestra.

[X,Y] = ndgrid(-1:.3:1,-2:.3:2); V = 0.75*Y.^3 - 3*Y - 2*X.^2;

Construye el.griddedInterpolant

F = griddedInterpolant(X,Y,V,'spline');

Interpolar sobre intervalos más finos con espaciado 0,1.

[Xq,Yq] = ndgrid(-1:.1:1,-2:.1:2); Vq = F(Xq,Yq);

Graficar el resultado.

figure() surf(X,Y,V); view(65,60) title('Sample Data');

 figure() surf(Xq,Yq,Vq); view(65,60) title('Refined with Spline');

griddedInterpolant en tres dimensiones

Este ejemplo muestra cómo crear un Interpolante 3D y evaluarlo sobre un plano de corte para que pueda trazar los valores en ese plano.

Cree una cuadrícula completa y valores de muestra.

[X,Y,Z] = ndgrid((-5:2:5)); V = X.^3 + Y.^2 + Z.^2;

Construye el.griddedInterpolant

F = griddedInterpolant(X,Y,Z,V,'cubic');

Ya que ya creamos la cuadrícula completa para generar nuestros valores de muestra, no teníamos nada que perder al pasarlo.griddedInterpolant En la práctica, sin embargo, es común cargar los datos de muestra en MATLAB desde el disco. La rejilla compacta puede ser muy beneficiosa en estos casos, ya que permite especificar toda la rejilla en una forma mucho más económica en términos de memoria. Si hubiéramos cargado en MATLAB en lugar de calcularlo desde una cuadrícula completa, podríamos haber creado una cuadrícula compacta para conservar la memoria en nuestro espacio de trabajo.V Por ejemplo,

gv = {(-5:2:5),(-5:2:5),(-5:2:5)}; F = griddedInterpolant(gv,V,'cubic');

Ahora interpolar sobre un plano con un espaciado de 0,25.Z = 2

[Xq,Yq,Zq] = ndgrid((-5:.25:5),(-5:.25:5),2:2); Vq = F(Xq,Yq,Zq);

Graficar el resultado.

surf(Xq,Yq,Vq); title('Refined with Linear Interpolation');

griddedInterpolant en cuatro dimensiones

En este ejemplo se crea un Interpolante 4-D y se evalúa en un único punto.

  1. Cree una rejilla gruesa y valores de muestra.

    [X1,X2,X3,X4] = ndgrid((-5:2:5)); V = X1.^3 + X2.^2 + X3.^2 +X4;

  2. Construye el.griddedInterpolant

    F = griddedInterpolant(X1,X2,X3,X4,V,'linear');

  3. Consultar en un solo punto.griddedInterpolant

    Vq = F([-3.2 2.1 4.7 -1.3])

    genera lo siguiente:MATLAB

    ans =    -10.1000

.

Otras formas de trabajar con griddedInterpolant

Dependiendo de la disposición de los puntos de consulta, es posible que prefiera una sintaxis de evaluación sobre las demás. Por ejemplo, cree el siguiente Interpolante:

[X,Y] = ndgrid(-1:.25:1,-2:.25:2); V = 0.75*Y.^3-3*Y-2*X.^2; F = griddedInterpolant(X,Y,V);

Consulta usando una cuadrícula completa para dar los valores en los puntos de cuadrícula:F

[Xq,Yq] = ndgrid(-1:.1:0,-2:.1:0); Vq = F(Xq,Yq);

También puede interpolar sobre la misma rejilla utilizando el formato de rejilla compacta:

gvq = {-1:.1:0,-2:.1:0}; Vq = F(gvq);

O puede consultar un solo punto:

Vq =  F(.315,.738) 

que devuelve:

Vq =     -2.1308 

o un conjunto aleatorio de puntos dispersos:

rng('default') Vq = F(rand(3,2))

que devuelve:

Vq =     -3.4919    -3.3557    -0.3515

También puede examinar el in:ValuesF

 F.Values(1,3) 

que devuelve:

 ans =     -0.0313

O puede reemplazar la matriz:Values

F.Values = 2*V;

Puede editar las propiedades en la marcha.F Por ejemplo, puede reemplazar el método de interpolación de la siguiente manera:

 F.Method = 'cubic'; 

También puede reemplazar el in.GridVectorsF En primer lugar, examine: es una matriz de celdas y muestra el primer vector de rejilla:GridVectors

gv = F.GridVectors; gv{1}
gvgv{1}
ans =     -1.0000   -0.7500   -0.5000   -0.2500    0    0.2500    0.5000    0.7500    1.0000

Ahora Reemplace el in creando una nueva matriz de celdas:GridVectorsFnew_gv

new_gv = {(0:0.3:1),(0:0.3:1)}; F.GridVectors = new_gv;