Como interpolar dados multiponto para os centros celulares de uma malha não estruturada?

11

Eu tenho conjuntos de dados de campo multiponto, cada conjunto de dados de pontos se refere a uma única célula de uma malha não estruturada. O objetivo é interpolar os dados para o centro celular, direta ou indiretamente, da maneira mais precisa.

Se eu usar a interpolação com Distância inversa ponderada, no caso em que a distância entre a fonte e o alvo (centro da célula) for muito pequena, eu posso acabar com uma exceção de ponto flutuante.

Para esse tipo de interpolação em uma malha estruturada, é usada uma interpolação ponderada por volume. Isso não se traduz diretamente em uma célula de malha de formato arbitrário.

A introdução de uma tolerância para que uma interpolação IDW contorne o SIGFPE só faz sentido se eu não apresentar nenhum teste que possa tornar a interpolação ineficiente. Está adicionando um δ suficientemente pequenoδ ao denominador para cada peso é uma opção possível com a interpolação IDW? Quais são os métodos de interpolação adequados para esse problema?

Informação adicional:

Para a interpolação da malha para os pontos, estou usando uma interpolação baseada nas coordenadas barcêntricas . Cada célula poliédrica da malha é decomposta em tetraedro. O campo centralizado da célula é interpolado para os pontos da célula usando a interpolação IDW . Uma pesquisa é realizada para cada ponto para encontrar o tetraedro no qual ele se encontra, e os valores são interpola- dos usando a interpolação barentêntrica .

Para a interpolação dos pontos para a malha, isso não é possível. Os valores centrados nas células são desconhecidos. Não há maneira de montar uma composição tetraédrico que iria impor , onde W P C é o peso, relativamente a um ponto P e um centro de célula C . Isso vem do fato de a configuração do ponto ser arbitrária. Portanto, atualmente estou usando o IDW para isso, certificando-me de que não recebo uma exceção de ponto flutuante. Existem métodos de interpolação mais adequados para esse problema?pWPC=1WPC

tmaric
fonte
Você pode ser um pouco mais específico em relação à função de ponderação que está usando? Existem várias abordagens de interpolação que usam funções de ponderação polinomial que não possuem singularidades nos pontos finais.
Pedro
1
Se a função de interpolar é suave, você já pensou em usar funções de base radial para interpolar globalmente a partir da malha? Você pode criar
fcruz
A biblioteca em que estou trabalhando realmente suporta RBF (suporte compacto e global), mas tenho muito pouca experiência com isso. Obrigado pela dica .. :)
tmaric 21/05
1
Se você tentar a biblioteca SciPy RBF, esteja ciente desse bug
n00b
Você tem valores de gradiente de variável dependente nos vértices celulares?
Johntra Volta 25/05

Respostas:

7

Links para diversos pacotes de software para interpolação de dados dispersos estão na minha página da web http://www.mat.univie.ac.at/~neum/stat.html#fit

O livro
GE Fasshauer, Métodos de aproximação de malha livre usando MATLAB, World Scienti fi c 2007.
fornece um estado da arte abrangente (a partir de 2006).

Alguns artigos mais recentes sobre interpolação de dados 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

O método a ser usado depende muito do uso do interpolante resultante. Os métodos de Kriging são baseados em um modelo estocástico, portanto, são bons se os dados a serem interpolados forem um pouco barulhentos. As funções de base radial devem ser preferidas se (implementadas de forma estável) e se desejar um resultado visualmente agradável (interpolação de baixa curvatura).

Arnold Neumaier
fonte
Professor Neumaier, dos métodos que você reuniu nos links do seu site e na sua resposta, você tem alguma recomendação específica para o aplicativo descrito na pergunta?
Geoff Oxberry
Eu acho que tenho que aprender a fazer ... como sempre, a quantidade de coisas que precisam ser aprendidas cresce exponencialmente com o tempo, e a quantidade de coisas que eu consigo aprender crescem linearmente na melhor das hipóteses. :) Obrigado. Usarei a interpolação IDW para a implementação inicial e lerei sobre interpolação de dados dispersos (o RBF parece ser a escolha da moda). :)
tmaric
1
@ GeoffOxberry: coletei os links ao longo do tempo, sem ter experimentado os pacotes. Portanto, não posso recomendar uma em particular. Mas eu adicionei um comentário sobre recomendações qualitativas.
Arnold Neumaier
3

Abaixo, darei um exemplo de como interpolo de um conjunto de pontos para outro, na malha de volume finito.

Coloquei um arranjo de variáveis ​​- os dados que armazeno na memória representam valores nos centros de células. Eu guardo variáveis ​​de campo e seus gradientes. Os gradientes são encontrados a partir dos valores circundantes, resolvendo um problema dos mínimos quadrados (com QR via reflexões de Household).

Seu arranjo pode ser diferente, mas o princípio é o mesmo.

ϕf

ϕnb1+ϕnb1rnb1,f=ϕf

ϕnb2+ϕnb2rnb2,f=ϕf

...

ϕnbn+ϕnbnrnbn,f=ϕf

nbrnbn,ff

Então eu escrevo

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

Portanto, você precisa de um conjunto de valores e gradientes de campo nesses pontos. Você precisa decidir quais pontos circundantes contribuirão para o seu ponto interpolado, bem como os vetores de distância desses pontos para os pontos nos quais interpolamos.

Por exemplo: Se alguém armazena dados representativos dos valores nos vértices da célula, você usa esta equação para encontrar valores do centro da célula etc., tudo dependendo da situação que você possui.

Portanto, isso é baseado na série de Taylor em torno do ponto. Pode-se usar também segundas derivadas para derivar uma expressão mais precisa.

John Travolta
fonte
ϕf1n
1
Eu escrevi isso no meu código rapidamente. Aqui, assume-se apenas que os dados variam linearmente no espaço, é por isso que apenas as primeiras derivadas da série Taylor são incluídas. Não há suposições sobre a malha, ela funciona para qualquer malha.
Johntra Volta
1
No entanto, você pode adicionar pesos. Como na reconstrução do gradiente do quadrado mínimo, onde temos as versões ponderada e não ponderada.
Johntra Volta
1n
Você pode entrar em contato comigo por e-mail (você pode encontrá-lo no meu perfil de usuário) para uma discussão mais aprofundada. Estou interessado em ver como você resolverá o problema.
precisa saber é o seguinte