Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Extrapolar datos dispersos

Factores que afectan a la precisión de la extrapolación

scatteredInterpolant proporciona una funcionalidad para aproximar valores en puntos que se encuentran fuera de la envolvente convexa. El método de extrapolación 'linear' se basa en una aproximación por mínimos cuadrados del gradiente en el límite de la envolvente convexa. Los valores que devuelve para los puntos de consulta que se encuentran fuera de la envolvente convexa se basan en los valores y gradientes del límite. La calidad de la solución depende de lo bien que haya muestreado los datos. Si los datos se muestrean con una frecuencia baja, la calidad de la extrapolación será deficiente.

Además, la triangulación cerca del límite de la envolvente convexa puede generar triángulos en forma de astilla. Estos triángulos pueden comprometer los resultados de su extrapolación, del mismo modo que pueden comprometer los resultados de la interpolación. Para obtener más información, consulte Interpolation Results Poor Near the Convex Hull.

Debe inspeccionar visualmente los resultados de la extrapolación usando lo que sabe sobre el comportamiento fuera del dominio.

Comparar la extrapolación de datos dispersos muestreados con alta y baja frecuencia

Este ejemplo muestra cómo interpolar dos muestreos diferentes de la misma función parabólica. También muestra que una mejor distribución de los puntos de muestra produce mejores resultados de extrapolación.

Cree una distribución radial de puntos espaciados 10 grados alrededor de 10 círculos concéntricos. Use bsxfun para calcular las coordenadas x=cosθ y y=sinθ.

theta = 0:10:350;
c = cosd(theta);
s = sind(theta);
r = 1:10;

x1 = bsxfun(@times,r.',c);
y1 = bsxfun(@times,r.',s);

figure
plot(x1,y1,'*b')
axis equal

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

Cree un segundo conjunto de puntos distribuidos con menor frecuencia. Use la función rand para crear muestreos aleatorios en el intervalo [-10, 10].

rng default;
x2 = -10 + 20*rand([25 1]);
y2 = -10 + 20*rand([25 1]);
figure
plot(x2,y2,'*')

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

Muestree una función parabólica, v(x,y), en ambos conjuntos de puntos.

v1 = x1.^2 + y1.^2;
v2 = x2.^2 + y2.^2;

Cree un scatteredInterpolant para cada muestreo de v(x,y).

F1 = scatteredInterpolant(x1(:),y1(:),v1(:));
F2 = scatteredInterpolant(x2(:),y2(:),v2(:));

Cree una cuadrícula de puntos de consulta que se extiendan más allá de cada dominio.

[xq,yq] = ndgrid(-20:20);

Evalúe F1 y represente los resultados.

figure
vq1 = F1(xq,yq);
surf(xq,yq,vq1)

Figure contains an axes object. The axes object contains an object of type surface.

Evalúe F2 y represente los resultados.

figure
vq2 = F2(xq,yq);
surf(xq,yq,vq2)

Figure contains an axes object. The axes object contains an object of type surface.

La calidad de la extrapolación no es tan buena para F2 debido a la baja frecuencia de muestreo de puntos en v2.

Extrapolación de datos 3D

Este ejemplo muestra cómo extrapolar un conjunto de datos de cuadrícula 3D bien muestreados con scatteredInterpolant. Los puntos de consulta se encuentran en una cuadrícula plana que está completamente fuera del dominio.

Cree una cuadrícula de 10 por 10 por 10 puntos de muestra. Los puntos de cada dimensión están en el intervalo [-10, 10].

[x,y,z] = ndgrid(-10:10);

Muestree una función, v(x,y,z), en los puntos de muestra.

v = x.^2 + y.^2 + z.^2;

Cree un scatteredInterpolant, especificando interpolación y extrapolación lineal.

F = scatteredInterpolant(x(:),y(:),z(:),v(:),'linear','linear');

Evalúe la interpolante sobre una cuadrícula x-y que abarca el intervalo [-20,20] en una elevación z = 15.

[xq,yq,zq] = ndgrid(-20:20,-20:20,15);
vq = F(xq,yq,zq);
figure
surf(xq,yq,vq)

Figure contains an axes object. The axes object contains an object of type surface.

La extrapolación ha devuelto buenos resultados porque la función está bien muestreada.