Qual quadratura numérica escolher para integrar uma função com singularidades?

9

Por exemplo, eu gostaria de calcular numericamente a forma de em algum domínio que inclui zero, tentei a quadratura de Gauss e ela falha, está meio distante da verdadeira na esfera unitária, usando coordenadas esféricas para integrar, existe alguma maneira de fazer isso? Esse problema geralmente é visto nos problemas de brinquedo de computação de elemento finito para domínios com cantos reentrantes. Obrigado.u = 1L2 G2u=1(x2+y2+z2)1/3L2

Shuhao Cao
fonte
2
Se a origem estiver dentro do domínio de integração, posso sugerir que você divida sua integral e depois transforme cada uma em coordenadas esféricas?
JM
Eu concordo com o JM - se você conhece a localização e a estrutura das singularidades de antemão, é melhor usar essas informações estruturais escrevendo as chamadas para suas rotinas de quadratura de forma inteligente versus alimentando-as com um pacote numérico e esperando que (a) encontra as singularidades e (b) faz a coisa certa com elas.

Respostas:

8

Você deve conseguir resultados precisos com mpmath , um módulo Python para cálculos de ponto flutuante de precisão arbitrária. Existem exemplos de integração com singularidades na documentação . Você vai querer dizer explicitamente para interromper o intervalo:

from mpmath import *
f = lambda x,y,z: 1./(x**2+y**2+z**2)**1./3
quad(f,[-1,0,1],[-1,0,1],[-1,0,1])

Pode ser necessário aumentar a precisão (por exemplo mp.dps=30) e provavelmente será lenta, mas deve ser bastante precisa.

Você também pode tentar aninhar chamadas no MATLAB quadgk(), que usa a quadratura adaptativa de Gauss-Kronrod em 1D.

David Ketcheson
fonte