Come calcolare numericamente i residui?


15

Devo calcolare il seguente integrale: Dove è una matrice (una particella cinetica e energia potenziale espressa in una base), è una matrice che dipende da (una particella molte- body Green's) e l'integrale del contorno è un semicerchio sinistro. L'integrando ha i poli sull'asse reale negativo ed è costoso da valutare. Qual è il modo più efficace per calcolare tale integrale?f ( E ) = T r

12πiCf(E)dE
hGEf(E)
f(E)=Tr((h+E)sol(E))
hsolEf(E)

Ecco la mia ricerca finora:

1) Uso l'integrazione gaussiana, il mio percorso di integrazione è un rettangolo. Ho fissato il lato sinistro e destro (cioè la larghezza) e ho giocato con l'altezza (sopra e sotto l'asse reale) in modo tale che per il dato ordine di integrazione ottengo la massima precisione. Ad esempio per l'ordine 20, se l'altezza è troppo grande, la precisione diminuisce (ovviamente), ma se è troppo piccola, diminuisce anche (la mia teoria è che ha bisogno di sempre più punti attorno ai poli man mano che l'altezza scende 0). Ho optato per un'altezza ottimale 0,5 per la mia funzione.

2) Quindi ho impostato il lato destro del rettangolo su E0, in genere E0 = 0, ma potrebbe essere E0 = -0.2 o qualcosa di simile.

3) Comincio a spostare il lato sinistro del rettangolo a sinistra e per ogni passaggio eseguo la convergenza dell'ordine di integrazione per assicurarmi che il mio integrale sia completamente convergente per ogni rettangolo. Aumentando la larghezza, alla fine ottengo un valore convergente nel limite del semicerchio sinistro infinito.

Il calcolo è molto lento e anche non molto preciso per larghezze elevate. Un miglioramento consiste nel dividere semplicemente la lunga larghezza in "elementi" e utilizzare l'integrazione gaussiana su ciascun elemento (proprio come in FE).

Un'altra opzione sarebbe quella di integrare un piccolo cerchio attorno a ciascun polo e riassumerlo. I problemi:

a) Come trovare numericamente i poli della funzione ? Dovrebbe essere robusto. L'unica cosa che so è che si trovano sull'asse reale negativo. Per alcuni di loro (ma non tutti) conosco anche un'ipotesi iniziale abbastanza buona. Esiste un metodo che funziona per qualsiasi funzione analitica ? O dipende dalla forma effettiva di f ( E ) ?f ( E )f(E)f(E)f(E)

b) Una volta che conosciamo i poli, quale schema numerico è il migliore per integrare il piccolo cerchio attorno ad esso? Dovrei usare l'integrazione gaussiana in un cerchio? O dovrei usare una distribuzione uniforme dei punti?

Un'altra opzione potrebbe essere che una volta che conosco i poli grazie a a), potrebbe esserci un modo semi-analitico per ottenere i Residui senza la necessità della complessa integrazione. Ma per ora sarei felice di ottimizzare solo l'integrazione del profilo.


1
Hai controllato il libro "Metodi numerici per l'inversione della trasformazione di Laplace" di Cohen (2007)? Anche IIRC, Robert Piessens (di fama QUADPACK) ha lavorato su questo argomento.
GertVdE,

Risposte:


7

p(X)q(X)

f(X)p(X)q(X)

Xf(X) q(X)

L'interpolazione / approssimazione razionale può essere una cosa complicata, ma recentemente ho scritto un articolo su un algoritmo stabile per calcolarli usando l'SVD. L'articolo contiene il codice Matlab che implementa l'algoritmo e una sua versione più ampia è disponibile come funzione ratinterpnel progetto Chebfun , di cui sono uno degli sviluppatori.

Per la tua seconda domanda, questo documento può essere utile.


Grazie per tutti i consigli! Ecco il codice netlib.org/toms/579 del documento Bengt Fornberg. Sfortunatamente, c'è qualche bug numerico, poiché questo è l'output che sto ricevendo: gist.github.com/2942970#file_output . Quindi dovrò reimplementarlo o eseguirne il debug. Il link Chebfun mi dà 404 (l'ho provato un paio di mesi fa con gli stessi risultati, quindi forse semplicemente non funziona dagli Stati Uniti).
Ondřej Čertík,

@OndřejČertík: non ho mai usato il codice TOMS 579 da solo, quindi non so cosa dirti degli errori. Per quanto riguarda la homepage di Chebfun, potresti provare a "cercarla su Google" e vedere se funziona allora?
Pedro,

Google trova la home page di Chebfun e mostra le versioni memorizzate nella cache. Ma quando faccio clic sulla pagina, ecco cosa ottengo: pastehtml.com/view/c1ts4h3ct.html
Ondřej Čertík,

Prova un browser diverso? O da un altro ISP. Il sito web funziona bene da qui (negli Stati Uniti.)
Costis,

Ho provato Firefox e Chrome. Quindi deve dal mio ISP. Strano.
Ondřej Čertík,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.