Welche numerische Quadratur soll gewählt werden, um eine Funktion mit Singularitäten zu integrieren?

9

Zum Beispiel möchte ich die -Norm von u = 1 numerisch berechnenL2 ingewissen Domänedie Null enthält, habe ich versuchtGauss Quadratur und es scheitert, ist es irgendwie weit von der realenL2-Norm auf der Einheitskugel Kugelkoordinaten verwendet, zu integrieren, Gibt es einen guten Weg, dies zu tun? Dieses Problem tritt häufig bei Problemen mit Finite-Elemente-Computerspielzeugen für Domänen mit wiedereintretenden Ecken auf. Vielen Dank.u=1(x2+y2+z2)1/3L2

Shuhao Cao
quelle
2
Wenn der Ursprung innerhalb der Integrationsdomäne liegt, kann ich vorschlagen, Ihr Integral aufzubrechen und dann jedes in sphärische Koordinaten umzuwandeln?
JM
Ich stimme JM zu - wenn Sie den Ort und die Struktur der Singularitäten im Voraus kennen, ist es besser, diese Strukturinformationen zu verwenden, um die Aufrufe Ihrer Quadraturroutinen intelligent zu schreiben, als sie einem numerischen Paket zuzuführen und zu hoffen, dass (a) es findet die Singularitäten und (b) macht das Richtige mit ihnen.

Antworten:

8

Mit mpmath , einem Python-Modul für Gleitkommaberechnungen mit beliebiger Genauigkeit, sollten Sie in der Lage sein, genaue Ergebnisse zu erzielen . In der Dokumentation finden Sie Beispiele für die Integration mit Singularitäten . Sie sollten es explizit anweisen, das Intervall aufzubrechen:

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

Möglicherweise müssen Sie die Genauigkeit erhöhen (z. B. mp.dps=30), und es wird wahrscheinlich langsam sein, sollte aber ziemlich genau sein.

Sie können auch versuchen, Aufrufe an MATLABs zu verschachteln quadgk(), die die adaptive Gauß-Kronrod-Quadratur in 1D verwenden.

David Ketcheson
quelle