¿Cómo calcular numéricamente los residuos?

15

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?

12πyoCF(mi)remi
F(mi)=Tr((h+mi)sol(mi))
hsolmiF(mi)

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 ?F(mi)F(mi)F(mi)

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.

Ondřej Čertík
fuente
1
¿Ha consultado el libro "Métodos numéricos para la inversión de transformadas de Laplace" de Cohen (2007)? IIRC, Robert Piessens (de la fama QUADPACK) también trabajó en este tema.
GertVdE

Respuestas:

7

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 quepag(X)q(X)

F(X)pag(X)q(X)

XF(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 ratinterpen el proyecto Chebfun , del cual soy uno de los desarrolladores.

Para su segunda pregunta, este documento puede ser útil.

Pedro
fuente
¡Gracias por todos los consejos! Aquí está el código netlib.org/toms/579 del artículo de Bengt Fornberg. Desafortunadamente, hay algún error numérico, ya que este es el resultado que estoy obteniendo: gist.github.com/2942970#file_output . Entonces tendré que volver a implementarlo o depurarlo. El enlace Chebfun me da 404 (lo probé hace un par de meses con los mismos resultados, así que tal vez simplemente no funciona desde EE. UU.).
Ondřej Čertík
@ OndřejČertík: nunca he usado el código TOMS 579, así que no sé qué decirle sobre los errores. En cuanto a la página de inicio de Chebfun, ¿podrías intentar "buscar en Google" y ver si funciona?
Pedro
Google encuentra la página de inicio de Chebfun y muestra las versiones en caché. Pero cuando hago clic en la página, esto es lo que obtengo: pastehtml.com/view/c1ts4h3ct.html
Ondřej Čertík
Pruebe con un navegador diferente? O de un ISP diferente. El sitio web funciona bien desde aquí (en EE. UU.)
Costis
Probé Firefox y Chrome. Entonces debe hacerlo mi ISP. Extraño.
Ondřej Čertík