Мне нужно вычислить следующий интеграл: Где - матрица (кинетическая и потенциальная энергия одной частицы выражена в базисе), - матрица, зависящая от (многочастичная одночастичная тело функции Грина), а контурный интеграл представляет собой левый полукруг. Подынтегральная функция имеет полюсы на отрицательной вещественной оси, и ее оценка дорогая. Как наиболее эффективно рассчитать такой интеграл?f ( E ) = T r
Вот мое исследование до сих пор:
1) Я использую гауссову интеграцию, мой путь интеграции - прямоугольник. Я зафиксировал левую и правую сторону (то есть ширину) и поиграл с высотой (выше и ниже реальной оси), чтобы для данного порядка интегрирования я получил наивысшую точность. Например, для порядка 20, если высота слишком велика, точность снижается (очевидно), но если она слишком мала, она также снижается (моя теория состоит в том, что по мере увеличения высоты ей нужно все больше точек вокруг полюсов). 0). Я установил оптимальную высоту 0,5 для моей функции.
2) Затем я установил правую сторону прямоугольника на E0, обычно E0 = 0, но это может быть E0 = -0,2 или что-то подобное.
3) Я начинаю перемещать левую сторону прямоугольника влево и для каждого шага выполняю конвергенцию порядка интегрирования, чтобы убедиться, что мой интеграл полностью сходится для каждого прямоугольника. Увеличивая ширину, я в итоге получаю сходящееся значение в пределе бесконечного левого полукруга.
Вычисление действительно медленное, а также не очень точное для больших значений ширины. Одним из улучшений является простое разбиение длинной ширины на «элементы» и использование гауссовой интеграции для каждого элемента (как в FE).
Другим вариантом было бы объединить небольшой круг вокруг каждого полюса и подвести его итог. Проблемы:
а) Как численно найти полюсы функции ? Это должно быть крепким. Единственное, что я знаю, это то, что они находятся на отрицательной реальной оси. Для некоторых из них (но не для всех) я также знаю довольно хорошее начальное предположение. Существует ли метод, который работает для любой аналитической функции ? Или это зависит от фактической формы ?f ( E ) f ( E )
б) Как только мы узнаем полюса, какая числовая схема лучше всего подходит для объединения малого круга вокруг него? Должен ли я использовать гауссову интеграцию по кругу? Или я должен использовать какое-то равномерное распределение точек?
Другой вариант может заключаться в том, что, как только я узнаю полюса благодаря a), может быть какой-то полуаналитический способ получения остатков без необходимости сложной интеграции. Но сейчас я был бы рад просто оптимизировать интеграцию контуров.
источник
Ответы:
Рациональная интерполяция / аппроксимация может быть сложной задачей, но я недавно стал соавтором статьи о стабильном алгоритме для их вычисления с использованием SVD. Документ содержит код Matlab, реализующий алгоритм, и его расширенная версия доступна в качестве функции
ratinterp
в проекте Chebfun , одним из разработчиков которого я являюсь.Для вашего второго вопроса эта статья может быть полезна.
источник