¿Qué cuadratura numérica elegir para integrar una función con singularidades?

9

Por ejemplo, me gustaría calcular numéricamente la forma de en algún dominio que incluye cero, probé la cuadratura de Gauss y falla, está un poco lejos de la forma real en la bola de la unidad usando coordenadas esféricas para integrar, ¿hay alguna buena manera de hacer esto? Este problema se ve a menudo en los problemas de cálculo de elementos finitos para dominios con esquinas reentrantes. Gracias.L2u=1(x2+y2+z2)1/3L2

Shuhao Cao
fuente
2
Si el origen está dentro del dominio de integración, ¿puedo sugerir romper su integral y luego transformar cada una en coordenadas esféricas?
JM
Estoy de acuerdo con JM: si conoce de antemano la ubicación y la estructura de las singularidades, es mejor que use esa información estructural al escribir las llamadas a sus rutinas de cuadratura de forma inteligente en lugar de alimentarlas en un paquete numérico y esperar que (a) encuentra las singularidades y (b) hace lo correcto con ellas.

Respuestas:

8

Debería poder obtener resultados precisos con mpmath , un módulo de Python para cálculos de punto flotante de precisión arbitraria. Hay ejemplos de integración con singularidades en la documentación . Querrás decirle explícitamente que rompa el 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])

Es posible que necesite aumentar la precisión (p mp.dps=30. Ej. ) Y probablemente será lenta, pero debería ser bastante precisa.

También puede intentar anidar llamadas a MATLAB quadgk(), que utiliza la cuadratura adaptativa de Gauss-Kronrod en 1D.

David Ketcheson
fuente