数值主值积分 - Hilbert like

计算科学 正交
2021-12-08 08:54:11

我想用表格计算积分的 PV

G~l(ω)=2ωπPV0G~d(ω)ω2ω2dω
在 MATLAB 中。如何做到这一点对我来说并不明显。我尝试使用分解来改变分母的幂,以允许在 MATLAB 中使用 Hilbert 函数,但这并没有奏效。任何见解将不胜感激。

G~d(ω)是一个偶函数,所以我觉得我可以进行轮廓积分并在右半平面中拾取残差,但我宁愿以数字方式进行,因为G~d(ω)比解析函数更完整地作为数值函数存在。

1个回答

远离奇异点,标准求积方法应该没问题,所以问题实际上是关于计算形式的积分

P.V.hhf(x)xdx.

我建议尝试以下方法:

如果你知道一个封闭形式的泰勒级数f(x)=G(ω+x), 你可以选择h小到足以使级数近似准确,并以封闭形式计算每个级数项的主值。

或者,您可以尝试插值f在数字上,使用类似的东西polyfit,这会给你泰勒级数。根据您的功能的表现如何,很难从一开始就说这是否肯定会起作用。

仍然最简单的方法(尽管数值不稳定)是将积分写为

0hf(x)f(x)xdx,
并将标准正交算法应用于此。问题是计算f(x)f(x)会导致顺序上的不准确0h(ϵmach/x)dx,这可能会或可能不会被容忍。如果你有办法简化表达式f(x)f(x)为了使其数值稳定,这可能是最好的选择。

有一些方法可以导出正交节点和权重来计算此类积分的主值(只需搜索它们,即使 GSL 也有它们),但我在 matlab 中找不到。

这些是实线上主值积分的数值方法。您也可以尝试将积分计算为

P.V.hhf(x)xdx=γf(x)xdx+πif(0),
在哪里γ是一个轮廓从hh通过实线以上。如果你能评价G对于复杂的ω,那么即使是标准的正交例程也能够计算积分γ.