¿Cómo interpolar datos multipunto a los centros celulares de una malla no estructurada?


11

Tengo conjuntos de datos de campo multipunto, cada conjunto de datos de punto se relaciona con una sola celda de una malla no estructurada. El objetivo es interpolar los datos al centro celular, directa o indirectamente, de la manera más precisa.

Si uso la interpolación ponderada de distancia inversa, en el caso de que la distancia entre la fuente y el objetivo (centro de la celda) sea muy pequeña, podría terminar con una excepción de coma flotante.

Para este tipo de interpolación en una malla estructurada, se utiliza una interpolación ponderada por volumen. Esto no se traduce directamente a una celda de malla de forma arbitraria.

Introducir una tolerancia para una interpolación IDW para eludir el SIGFPE tiene sentido solo si no introduzco ninguna prueba que pueda hacer que la interpolación sea ineficiente. ¿Agregar una suficientemente pequeña al denominador para cada peso es una opción posible con la interpolación IDW? ¿Qué métodos de interpolación adecuados para este problema conoces?δ

Información adicional:

Para la interpolación de la malla a los puntos, estoy usando una interpolación basada en las coordenadas barcycentric . Cada celda poliédrica de la malla se descompone en tetraedros. El campo centrado en la celda se interpola a los puntos de la celda usando la interpolación IDW . Se realiza una búsqueda para cada punto para encontrar el tetraedro en el que se encuentra, y los valores se interpolan utilizando la interpolación baricéntrica .

pWPC=1WPC


¿Puede ser un poco más específico con respecto a la función de peso que está utilizando? Existen varios enfoques de interpolación que utilizan funciones de ponderación polinómica que no tienen singularidades en los puntos finales.
Pedro

1
Si la función para interpolar es suave, ¿ha pensado en usar funciones de base radial para interpolar globalmente desde la malla? Puede construir un prototipo rápido usando python y scipy, vea aquí: docs.scipy.org/doc/scipy/reference/generated/…
fcruz

La biblioteca en la que estoy trabajando en realidad admite RBF (soporte compacto y global), pero tengo muy poca experiencia con esto. Gracias por el consejo .. :)
tmaric

1
Si prueba la biblioteca SciPy RBF, tenga en cuenta este error
n00b

¿Tiene valores de gradiente de variable dependiente en vértices de celda?
Johntra Volta

Respuestas:


7

Los enlaces a diversos paquetes de software para la interpolación de datos dispersos se encuentran en mi página web http://www.mat.univie.ac.at/~neum/stat.html#fit

El libro
GE Fasshauer, Métodos de aproximación sin malla utilizando MATLAB, World Scienti fi c 2007.
ofrece un estado de arte integral (a partir de 2006).

Algunos documentos más recientes sobre interpolación de datos dispersos:
http://www.stanford.edu/group/uq/pdfs/journals/jcp_scattered_2010.pdf
http://www.math.auckland.ac.nz/~waldron/Preprints/ Box-splines / box-splines.pdf

El método a utilizar depende mucho del uso que se haga del interpolante resultante. Los métodos de Kriging se basan en un modelo estocástico, por lo tanto, son buenos si los datos a interpolar son algo ruidosos. Las funciones de base radial son preferibles si (implementado de manera estable) y se desea un resultado visualmente agradable (interpolación de baja curvatura).


Profesor Neumaier, de los métodos que ha reunido en los enlaces de su sitio web y en su respuesta, ¿tiene alguna recomendación específica para la aplicación descrita en la pregunta?
Geoff Oxberry

Creo que tengo algo que aprender a hacer ... como siempre, la cantidad de cosas que necesitan aprender crece exponencialmente con el tiempo, y la cantidad de cosas que logro aprender, crece linealmente en el mejor de los casos. :) Gracias. Usaré la interpolación IDW para la implementación inicial y leeré sobre la interpolación de datos dispersos (RBF parece ser la opción de moda). :)
tmaric

1
@ GeoffOxberry: recopilé los enlaces con el tiempo, sin haber probado los paquetes. Por lo tanto, no puedo recomendar uno en particular. Pero agregué un comentario sobre recomendaciones cualitativas.
Arnold Neumaier

3

A continuación daré un ejemplo de cómo interpolar de un conjunto de puntos a otro, en una malla de volumen finito.

He colocado la disposición de las variables: los datos que almaceno en la memoria representan valores en los centros de células. Almaceno variables de campo y sus gradientes. Los gradientes se encuentran a partir de valores circundantes que resuelven un problema de mínimos cuadrados (con QR a través de reflexiones de Householder).

Su disposición puede diferir, pero el principio es el mismo.

ϕf

ϕnb1+ϕnb1rnb1,f=ϕf

ϕnb2+ϕnb2rnb2,f=ϕf

...

ϕnbn+ϕnbnrnbn,f=ϕf

nbrnbn,ff

Entonces escribo

ϕf=1n(i=1nϕnbi+i=1n(ϕnbirnbi,f))

Por lo tanto, necesita un conjunto de valores de campo y gradientes en esos puntos. Debe decidir qué puntos circundantes contribuirán a su punto interpolado, así como los vectores de distancia desde estos puntos hasta el punto al que interpolamos.

Por ejemplo: si uno almacena datos representativos de valores en vértices de celda, use esta ecuación para encontrar valores de centro de celda, etc., todo dependiendo de la situación que tenga.

Entonces esto se basa en la serie de Taylor alrededor del punto. También se pueden usar segundas derivadas para derivar una expresión más precisa.


ϕf1n

1
Escribí esto en mi código sobre la marcha. Aquí solo se supone que los datos varían linealmente en el espacio, por eso solo se incluyen las primeras derivadas de las series de Taylor. No hay suposiciones sobre la malla, funciona para cualquier malla.
Johntra Volta

1
Sin embargo, puede agregar pesos. Como en la reconstrucción de gradiente de mínimos cuadrados, donde tenemos versiones con y sin ponderación.
Johntra Volta

1n

Puede ponerse en contacto conmigo por correo electrónico (puede encontrarlo en mi perfil de usuario) para más discusión. Me interesa ver cómo resolverá el problema.
Johntra Volta
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.