Necesito calcular la siguiente integral: Donde es una matriz (cinética de una partícula y energía potencial expresada en una base), es una matriz que depende de (una partícula muchas- función del cuerpo verde) y la integral de contorno es un semicírculo izquierdo. El integrando tiene polos en el eje real negativo y su evaluación es costosa. ¿Cuál es la forma más efectiva de calcular tal integral?
Aquí está mi investigación hasta ahora:
1) Uso la integración gaussiana, mi camino de integración es un rectángulo. Arreglé el lado izquierdo y derecho (es decir, el ancho) y jugué con la altura (por encima y por debajo del eje real) de modo que para el orden de integración dado obtengo la mayor precisión. Por ejemplo, para la orden 20, si la altura es demasiado grande, la precisión disminuye (obviamente), pero si es demasiado pequeña, también disminuye (mi teoría es que necesita más y más puntos alrededor de los polos a medida que la altura aumenta) 0). Me instalé con una altura óptima de 0.5 para mi función.
2) Luego puse el lado derecho del rectángulo en E0, típicamente E0 = 0, pero podría ser E0 = -0.2 o algo similar.
3) Empiezo a mover el lado izquierdo del rectángulo hacia la izquierda y para cada paso hago la convergencia del orden de integración para asegurarme de que mi integral esté totalmente convergente para cada rectángulo. Al aumentar el ancho, eventualmente obtengo un valor convergente en el límite del semicírculo izquierdo infinito.
El cálculo es realmente lento y tampoco muy preciso para anchos grandes. Una mejora es simplemente dividir el ancho largo en "elementos" y usar la integración gaussiana en cada elemento (al igual que en FE).
Otra opción sería integrar un pequeño círculo alrededor de cada polo y resumirlo. Problemas:
a) ¿Cómo encontrar numéricamente los polos de la función ? Debe ser robusto. Lo único que sé es que están en el eje real negativo. Para algunos de ellos (pero no para todos) también conozco una suposición inicial bastante buena. ¿Existe un método que funcione para cualquier función analítica ? ¿O depende de la forma real de ?
b) Una vez que conocemos los polos, ¿qué esquema numérico es el mejor para integrar el círculo pequeño a su alrededor? ¿Debo usar la integración gaussiana en un círculo? ¿O debería usar una distribución uniforme de los puntos?
Otra opción podría ser que una vez que conozco los polos gracias a a), podría haber alguna forma semianalítica de obtener los Residuos sin la necesidad de una integración compleja. Pero por ahora estaría encantado de optimizar la integración del contorno.
fuente
Respuestas:
Puedo ofrecer una sugerencia para su primera pregunta: si sabe que sus polos están en algún lugar a lo largo del eje real, podría localizarlos de manera bastante eficiente utilizando la interpolación / aproximación racional . Esto equivale a encontrar polinomios y q ( x ) de modo quep ( x ) q( x )
La interpolación / aproximación racional puede ser algo complicado, pero recientemente he sido coautor de un artículo sobre un algoritmo estable para calcularlos usando la SVD. El documento contiene el código de Matlab que implementa el algoritmo, y una versión más extensa del mismo está disponible como función
ratinterp
en el proyecto Chebfun , del cual soy uno de los desarrolladores.Para su segunda pregunta, este documento puede ser útil.
fuente