Jak obliczyć numerycznie pozostałości?


15

Muszę obliczyć następującą całkę: Gdziejest macierzą (kinetyka jednej cząstki i energia potencjalna wyrażona w podstawie),jest macierzą zależną od(funkcja Greena jednego ciała dla wielu ciał), a całka konturu jest lewym półkolem. Całkama bieguny na ujemnej osi rzeczywistej i ocena jest kosztowna. Jaki jest najskuteczniejszy sposób obliczenia takiej całki?

12πiCf(E)dE
f(E)=Tr((h+E)G(E))
hGmif(E)

Oto moje dotychczasowe badania:

1) Korzystam z integracji Gaussa, moja ścieżka integracji jest prostokątem. Naprawiłem lewą i prawą stronę (tj. Szerokość) i grałem z wysokością (powyżej i poniżej osi rzeczywistej) tak, że dla danego porządku integracji otrzymuję najwyższą dokładność. Na przykład dla rzędu 20, jeśli wysokość jest zbyt duża, dokładność spada (oczywiście), ale jeśli jest zbyt mała, również spada (moja teoria mówi, że wraz ze wzrostem wysokości potrzebuje coraz więcej punktów wokół biegunów 0). Osiągnąłem optymalną wysokość 0,5 dla mojej funkcji.

2) Następnie ustawiam prawą stronę prostokąta na E0, zwykle E0 = 0, ale może to być E0 = -0,2 lub coś podobnego.

3) Zaczynam przesuwać lewą stronę prostokąta w lewo i dla każdego kroku dokonuję zbieżności kolejności integracji, aby upewnić się, że moja całka jest w pełni zbieżna dla każdego prostokąta. Zwiększając szerokość, ostatecznie uzyskuję zbieżną wartość w granicy nieskończonego lewego półkola.

Obliczenia są bardzo powolne, a także niezbyt dokładne dla dużych szerokości. Jednym z ulepszeń jest po prostu podzielenie dużej szerokości na „elementy” i zastosowanie integracji Gaussa na każdym elemencie (tak jak w Wf).

Inną opcją byłoby zintegrowanie małego koła wokół każdego bieguna i podsumowanie. Problemy:

a) Jak numerycznie znaleźć bieguny funkcji ? Powinien być solidny. Wiem tylko, że znajdują się na ujemnej osi rzeczywistej. Dla niektórych z nich (ale nie dla wszystkich) znam też całkiem dobre początkowe przypuszczenie. Czy istnieje metoda, która działa dla dowolnej funkcji analitycznej ? Czy to zależy od faktycznej formy ?f(E)f(E)f(E)

b) Kiedy znamy bieguny, jaki schemat numeryczny jest najlepszy do zintegrowania wokół niego małego koła? Czy powinienem używać integracji Gaussa na kole? Czy powinienem zastosować równomierny rozkład punktów?

Inną opcją może być to, że gdy poznam bieguny dzięki a), może istnieć jakiś pół-analityczny sposób na uzyskanie pozostałości bez potrzeby złożonej integracji. Ale na razie z przyjemnością zoptymalizuję integrację konturu.


1
Czy sprawdziłeś książkę „Numerical Methods for Laplace Transform Inversion” Cohena (2007)? IIRC, Robert Piessens (znany ze QUADPACK) również pracował nad tym tematem.
GertVdE

Odpowiedzi:


7

Mogę zaoferować sugestię dotyczącą pierwszego pytania: jeśli wiesz, że twoje bieguny znajdują się gdzieś wzdłuż prawdziwej osi, możesz dość skutecznie je zlokalizować, używając interpolacji / aproksymacji Rational . Sprowadza się to do znalezienia wielomianów i q ( x ) takich, żep(x)q(x)

f(x)p(x)q(x)

dla w pewnym przedziale. Bieguny f ( x ) powinny następnie pasować do pierwiastków q ( x ) .xf(x) q(x)

Racjonalna interpolacja / aproksymacja może być trudną rzeczą, ale ostatnio byłem współautorem artykułu na temat stabilnego algorytmu do obliczania ich za pomocą SVD. Artykuł zawiera kod Matlaba implementujący algorytm, a jego bardziej rozbudowana wersja jest dostępna jako funkcja ratinterpw projekcie Chebfun , którego jestem jednym z programistów.

W przypadku drugiego pytania ten artykuł może być przydatny.


Dzięki za wszystkie wskazówki! Oto kod netlib.org/toms/579 artykułu Bengta Fornberga. Niestety jest jakiś błąd numeryczny, ponieważ otrzymuję dane wyjściowe: gist.github.com/2942970#file_output . Więc będę musiał go ponownie wdrożyć lub debugować. Łącze Chebfun daje mi 404 (próbowałem kilka miesięcy temu z tymi samymi wynikami, więc może po prostu nie działa z USA).
Ondřej Čertík

@ OndřejČertík: Sam nigdy nie korzystałem z kodu TOMS 579, więc nie wiem, co powiedzieć o błędach. Jeśli chodzi o stronę główną Chebfun, czy możesz spróbować „google” i sprawdzić, czy to wtedy działa?
Pedro

Google znajduje stronę główną Chebfun i wyświetla wersje z pamięci podręcznej. Ale kiedy klikam na stronę, otrzymuję to: pastehtml.com/view/c1ts4h3ct.html
Ondřej Čertík

Wypróbować inną przeglądarkę? Lub od innego usługodawcy internetowego. Strona działa dobrze stąd (w USA.)
Costis

Wypróbowałem Firefox i Chrome. Musi to zrobić mój dostawca usług internetowych. Dziwne.
Ondřej Čertík
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.