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 y .
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
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,'*')
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)
Evalúe F2
y represente los resultados.
figure vq2 = F2(xq,yq); surf(xq,yq,vq2)
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)
La extrapolación ha devuelto buenos resultados porque la función está bien muestreada.