如何数值计算残差?

计算科学 复分析
2021-12-18 00:14:22

我需要计算以下积分:

12πiCf(E)dE
f(E)=Tr((h+E)G(E))
在哪里h是一个矩阵(一个粒子的动能和势能以基表示),G是一个矩阵,取决于E(单粒子多体格林函数)和等高线积分是一个左半圆。被积体f(E)在负实轴上有极点,评估成本很高。计算这种积分的最有效方法是什么?

到目前为止,这是我的研究:

1)我使用高斯积分,我的积分路径是一个矩形。我固定了左侧和右侧(即宽度)并使用高度(实轴上方和下方)进行播放,这样对于给定的积分顺序,我可以获得最高精度。例如对于 20 阶,如果高度太大,精度会下降(显然),但如果太小,它也会下降(我的理论是随着高度的增加,两极周围需要越来越多的点0)。我为我的功能设置了最佳高度 0.5。

2)然后我将矩形的右侧设置为 E0,通常 E0=0,但也可以是 E0=-0.2 或类似的值。

3)我开始将矩形的左侧向左移动,并且对于每一步我都会进行积分顺序收敛,以确保我的积分对于每个矩形都完全收敛。通过增加宽度,我最终在无限左半圆的极限内得到一个收敛值。

计算真的很慢,而且对于大宽度也不是很准确。一项改进是将长宽度简单地划分为“元素”并在每个元素上使用高斯积分(就像在 FE 中一样)。

另一种选择是在每个极点周围集成一个小圆圈并将其汇总。问题:

a) 如何在数值上找到函数的极点f(E)? 它应该是健壮的。我唯一知道的是它们在负实轴上。对于其中一些(但不是全部),我也知道一个很好的初步猜测。是否存在适用于任何分析函数的方法f(E)? 还是取决于实际的形式f(E)?

b) 一旦我们知道了极点,什么数值方案最适合积分它周围的小圆?我应该在圆上使用高斯积分吗?或者我应该使用点的一些均匀分布?

另一种选择可能是,一旦我通过 a) 知道了极点,可能会有一些半解析的方法来获得残基,而不需要复杂的积分。但现在我很乐意优化轮廓整合。

1个回答

我可以为您的第一个问题提供建议:如果您知道您的极点位于实轴上的某个位置,您可以使用Rational interpolation/approximation非常有效地定位它们。这相当于找到多项式p(x)q(x)这样

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

为了x在某个区间。的极点f(x) 然后应该匹配的根q(x).

有理插值/近似可能是一件棘手的事情,但我最近与人合着了一篇关于使用 SVD 计算它们的稳定算法的论文。该论文包含实现该算法的 Matlab 代码,并且其更广泛的版本可用作Chebfun 项目ratinterp中的函数,我是该项目的开发人员之一。

对于你的第二个问题,这篇论文可能有用。