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?
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 ?
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.
źródło
Odpowiedzi:
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)
dla w pewnym przedziale. Bieguny f ( x ) powinny następnie pasować do pierwiastków q ( x ) .x f(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
ratinterp
w projekcie Chebfun , którego jestem jednym z programistów.W przypadku drugiego pytania ten artykuł może być przydatny.
źródło