Quelle quadrature numérique choisir pour intégrer une fonction aux singularités?

9

Par exemple, je voudrais calculer numériquement la norme de u = 1L2 danscertain domaine qui comprend zéro, j'essayé quadratureGauss et d'échec, il estpeu loin de la vraieL2-norme sur la boule unité en coordonnées sphériques d'intégration, est existe-t-il un bon moyen de le faire? Ce problème est souvent observé dans les problèmes de jouets informatiques à éléments finis pour les domaines avec des coins rentrants. Merci.u=1(X2+y2+z2)1/3L2

Shuhao Cao
la source
2
Si l'origine se trouve dans le domaine d'intégration, puis-je suggérer de briser votre intégrale puis de la transformer chacune en coordonnées sphériques?
JM
Je suis d'accord avec JM - si vous connaissez au préalable l'emplacement et la structure des singularités, vous feriez mieux d'utiliser ces informations structurelles pour écrire les appels à vos routines de quadrature intelligemment que de les alimenter dans un package numérique et en espérant que (a) il trouve les singularités et (b) fait la bonne chose avec eux.

Réponses:

8

Vous devriez pouvoir obtenir des résultats précis avec mpmath , un module Python pour les calculs à virgule flottante de précision arbitraire. Il existe des exemples d'intégration avec des singularités dans la documentation . Vous voudrez lui dire explicitement de rompre l'intervalle:

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])

Vous devrez peut-être augmenter la précision (par exemple mp.dps=30) et elle sera probablement lente, mais devrait être assez précise.

Vous pouvez également essayer d'imbriquer des appels à MATLAB quadgk(), qui utilise la quadrature adaptative de Gauss-Kronrod en 1D.

David Ketcheson
la source