Jaką kwadraturę numeryczną wybrać, aby zintegrować funkcję z osobliwościami?

9

Na przykład chciałbym obliczyć numerycznie L.2)-norm of w jakiejś domenie zawierającej zero, próbowałem kwadratury Gaussa i to się nie udaje, to jest trochę daleko od prawdziwej normalnej na kuli jednostkowej, używając do integracji całek sferycznych, czy jest na to dobry sposób? Problem ten często pojawia się w problemach z zabawkami obliczającymi elementy skończone w domenach z ponownie pojawiającymi się narożnikami. Dzięki.u=1(x2)+y2)+z2))1/3)L.2)

Shuhao Cao
źródło
2
Jeśli pochodzenie znajduje się w domenie integracji, czy mogę zasugerować rozbicie całki, a następnie przekształcenie każdej z nich w sferyczne współrzędne?
JM
Zgadzam się z JM - jeśli znasz wcześniej lokalizację i strukturę osobliwości, lepiej skorzystaj z tej informacji strukturalnej, pisząc inteligentne wezwania do swoich procedur kwadraturowych, niż karmiąc je do pakietu numerycznego i mając nadzieję, że (a) znajduje osobliwości i (b) robi z nimi właściwą rzecz.

Odpowiedzi:

8

Powinieneś być w stanie uzyskać dokładne wyniki za pomocą mpmath , modułu Pythona do obliczeń zmiennoprzecinkowych o dowolnej precyzji. Dokumentacja zawiera przykłady integracji z osobliwościami . Będziesz chciał wyraźnie powiedzieć, aby przerwał interwał:

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

Może być konieczne zwiększenie precyzji (np. mp.dps=30) I prawdopodobnie będzie ona wolna, ale powinna być dość dokładna.

Możesz także spróbować zagnieździć wywołania MATLAB-a quadgk(), który wykorzystuje adaptacyjną kwadraturę Gaussa-Kronroda w 1D.

David Ketcheson
źródło