Как численно рассчитать остатки?

15

Мне нужно вычислить следующий интеграл: Где - матрица (кинетическая и потенциальная энергия одной частицы выражена в базисе), - матрица, зависящая от (многочастичная одночастичная тело функции Грина), а контурный интеграл представляет собой левый полукруг. Подынтегральная функция имеет полюсы на отрицательной вещественной оси, и ее оценка дорогая. Как наиболее эффективно рассчитать такой интеграл?f ( E ) = T r

12πiCf(Е)dЕ
hGEf(E)
е(Е)знак равноTр((час+Е)грамм(Е))
часграммЕе(Е)

Вот мое исследование до сих пор:

1) Я использую гауссову интеграцию, мой путь интеграции - прямоугольник. Я зафиксировал левую и правую сторону (то есть ширину) и поиграл с высотой (выше и ниже реальной оси), чтобы для данного порядка интегрирования я получил наивысшую точность. Например, для порядка 20, если высота слишком велика, точность снижается (очевидно), но если она слишком мала, она также снижается (моя теория состоит в том, что по мере увеличения высоты ей нужно все больше точек вокруг полюсов). 0). Я установил оптимальную высоту 0,5 для моей функции.

2) Затем я установил правую сторону прямоугольника на E0, обычно E0 = 0, но это может быть E0 = -0,2 или что-то подобное.

3) Я начинаю перемещать левую сторону прямоугольника влево и для каждого шага выполняю конвергенцию порядка интегрирования, чтобы убедиться, что мой интеграл полностью сходится для каждого прямоугольника. Увеличивая ширину, я в итоге получаю сходящееся значение в пределе бесконечного левого полукруга.

Вычисление действительно медленное, а также не очень точное для больших значений ширины. Одним из улучшений является простое разбиение длинной ширины на «элементы» и использование гауссовой интеграции для каждого элемента (как в FE).

Другим вариантом было бы объединить небольшой круг вокруг каждого полюса и подвести его итог. Проблемы:

а) Как численно найти полюсы функции ? Это должно быть крепким. Единственное, что я знаю, это то, что они находятся на отрицательной реальной оси. Для некоторых из них (но не для всех) я также знаю довольно хорошее начальное предположение. Существует ли метод, который работает для любой аналитической функции ? Или это зависит от фактической формы ?f ( E ) f ( E )е(Е)е(Е)е(Е)

б) Как только мы узнаем полюса, какая числовая схема лучше всего подходит для объединения малого круга вокруг него? Должен ли я использовать гауссову интеграцию по кругу? Или я должен использовать какое-то равномерное распределение точек?

Другой вариант может заключаться в том, что, как только я узнаю полюса благодаря a), может быть какой-то полуаналитический способ получения остатков без необходимости сложной интеграции. Но сейчас я был бы рад просто оптимизировать интеграцию контуров.

Ондржей Чертик
источник
1
Вы проверили книгу «Численные методы для инверсии преобразования Лапласа» Коэна (2007)? IIRC, Роберт Писсенс (из известности QUADPACK) также работал над этой темой.
GertVdE

Ответы:

7

п(Икс)Q(Икс)

е(Икс)п(Икс)Q(Икс)

Иксе(Икс) Q(Икс)

Рациональная интерполяция / аппроксимация может быть сложной задачей, но я недавно стал соавтором статьи о стабильном алгоритме для их вычисления с использованием SVD. Документ содержит код Matlab, реализующий алгоритм, и его расширенная версия доступна в качестве функции ratinterpв проекте Chebfun , одним из разработчиков которого я являюсь.

Для вашего второго вопроса эта статья может быть полезна.

Pedro
источник
Спасибо за все советы! Вот код netlib.org/toms/579 из статьи Бенгта Форнберга. К сожалению, есть некоторая числовая ошибка, так как это вывод, который я получаю: gist.github.com/2942970#file_output . Поэтому мне придется переопределить или отладить его. Ссылка на Chebfun дает мне 404 (я пробовал пару месяцев назад с такими же результатами, поэтому, возможно, это просто не работает из США).
Ондржей Чертик
@ OndřejČertík: Я никогда не использовал код TOMS 579, поэтому я не знаю, что сказать вам об ошибках. Что касается домашней страницы Chebfun, не могли бы вы попробовать «погуглить» и посмотреть, работает ли она тогда?
Педро
Google находит домашнюю страницу Chebfun и показывает кэшированные версии. Но когда я нажимаю на страницу, вот что я получаю: pastehtml.com/view/c1ts4h3ct.html
Ondřej Čertík
Попробуйте другой браузер? Или от другого провайдера. Сайт работает хорошо здесь (в США.)
Costis
Я пробовал Firefox и Chrome. Так должно быть у моего провайдера. Weird.
Ондржей Чертик