从实部数值恢复解析连续的虚部


11

我的情况。

我有一个通过复杂积分定义的复杂变量函数。我感兴趣的是此函数在虚轴上的值。我可以在以下功能区上对该函数进行数值访问:。形式上,积分表达式在该域之外是发散的,因此我需要解析继续。总结一下我的情况,ž = X Ý - × [ - 1 1 ]f(z)z=(x,y)(,)×[1,1]

在此处输入图片说明

这是我从数字上了解的功能区上的信息:f(z)

  1. 它同时围绕虚轴和实轴对称。

  2. 在处衰减为零。Re(z)

  3. 它在附近爆炸。我不知道这可能是极点或分支点。我怀疑这种奇异性的性质(以及解析延续的所有其他孤立奇异性)取决于此函数的特定参数化(有关详细信息,请参见下面的积分)ξz=±iξ

实际上,绘制时它看起来与或非常相似。这是真实部分的图:1 /1 + z 2 2 nsech2(z)1/(1+z2)2n

在此处输入图片说明

我的问题是,鉴于我对该函数有大量的信息(在该功能区上对其进行总数值访问),我是否可以通过某种方式沿虚轴数值计算对该函数的近似值?我正在使用Mathematica。

我对虚轴上的值感兴趣的原因是,我需要评估此函数的以下傅立叶变换:

(1)f¯(t)=dxeitx1x2+x02f(x)

对于的值,在我的情况下,它实际上是。尽管我对被积数非常了解,但这种傅立叶变换的振荡非常厉害,因此,我知道如何计算此轮廓的唯一其他方法是通过Contour积分。10t10


我尝试过的。

  1. 我实际上已经尝试过计算最终的高度振荡积分,即。(1)。评估等式 (1)对于单个值“ t”,需要花费几个小时才能计算出来。我已经进行了其中一些积分,其结果实际上是有意义的,但是我想要一种替代方法。

  2. 我已经尝试过分析性地继续使用Pade近似值,但这在计算上也很昂贵,但不如直接评估那么多。更重要的是,我无法用近似值的递增顺序建立收敛性(也不是部分和的平均值!),这与我使用这样的简单函数进行测试的方式形成对比(我可以使用简单的测试功能轻松地在宽范围的复杂平面上实现非常快速的收敛)。zsech2(z)z

  3. 我尝试了符号集成无济于事。我曾尝试将被积物按摩成Mathematica更易消化的形式,但我的尝试并未成功。


令人讨厌的积分。

令,,和为正实数,而是我们感兴趣的复数(在前面的讨论中扮演的角色)。限定:ķ ξ α ë žk4kξαEz

p12=(k4+12E)2+k2+α2p22=(k412E)2+k2+(1α)2

我感兴趣的积分如下:

f(E;α,ξ)=dk40d(k2)[α(1+p12)3ξ/2(1+p22)ξ/2(1+p12(1+p12)2ξ)(1+p22(1+p22)2ξ)++(p1p2)]

为了简洁起见,在这里我取消了被积函数的功能依赖表示法。我特别感兴趣中的值,范围,和(如上所述)的傅里叶变换(1),用于。0 < α <ξ=1,2,3100<α<1t 10


数值解析连续对这里肯定有帮助吗?您是否可以沿对其进行评估,其中的被积会呈指数衰减,但可直接获得?振荡积分无法评估也有些令人惊讶,因为通常用于振荡积分的专用方法将能够处理像一样的快速多项式衰减函数。我之所以这样说,是因为在玩完Mathematica中的积分后,我担心数值分析的延续可能恰好是一个盲目的胡同。ˉ ˚F ˚F ˚FR+0.99if¯ff
基里尔'18

1
我尝试直接在Mathematica中实现该积分,并在笔记本电脑上用20s 来评估:虽然不是很好,但也不是几个小时。如果我写了一个直接评估答案,对您有帮助吗?f¯
基里尔'18

@Kirill在多次尝试进行数值分析失败之后,我倾向于完全同意您的第一个评论。请,如果您能够在20秒钟内评估,我将非常感谢您的撰写。顺便说一句,可能需要补充的是,实际上不仅是一个耗时数小时的评估,而且还有大约30个评估(以间隔大小评估)。一次评估虽然花了我约14分钟。ˉ ˚F α&Element;[-12]0.1f¯f¯α[1,2]0.1
Arturo don Juan

我写了它,但是发现我的代码有问题,所以我不再确定我计算出的内容是否完全有效。您是否有任何已知有效的参考值?
基里尔

Answers:


5

注意:在这一点上,我有点担心Mathematica给我的积分值是虚假的。我认为它之所以有用,是因为它在很短的时间内给出了看起来不错的结果,但可能是因为它尝试使用的方法有错误或我做错了什么。因此,很可能下面的代码根本无法正常工作,我不知道。

注意2:这让我感到困扰,因此我使用Julia和GSL 编写了另一个版本(此处的代码,对代码质量感到抱歉),它g在2秒钟内得出Mathematica在下面给出的相同答案。所以我认为代码可能还可以。

我对数值解析连续性感到怀疑的主要原因是,在我有限的测试中,您的积分实际上看起来不错。特别是,和被乘数都在多项式上迅速衰减,而这恰恰是传统正交例程设计得很好处理的事情。也没有棘手的奇异之处。ˉ ˚Fff¯

我过去在数值积分方面的经验使我相信,较奇妙的数学方法有时会非常有用,但是评估数值傅立叶变换以及对有理数和代数函数进行积分是数值积分算法的基础,因此通常通过仔细选择算法并使用其参数来轻松取得进展。如果很难看清如何使数学技术正确运行,这通常是更简单的选择。

ClearAll[ξ, α, p1, p2, fi, f, g];
ξ = 1;
α = 1/2;
fi[e_, k4_, kp_] := Module[{
   p1 = (k4^2 + e/2)^2 + kp^2 + α^2,
   p2 = (k4^2 - e/2)^2 + kp^2 + (1 - α)^2},
  2 * (* because integrate k4 over (0,∞) *)
   2 kp * (* because d(kp^2) *)
   (α (1 + p1)^(3 ξ/2) (1 + p2)^(ξ/2)) /
     ((1 + p1 (1 + p1)^(2 ξ)) (1 + p2 (1 + p2)^(2 ξ)))
  ]
f[e_?NumericQ] := NIntegrate[
   fi[e, k4, kp], {k4, 0, ∞}, {kp, 0, ∞},
   Method -> {Automatic, "SymbolicProcessing" -> 0}];

(* !!! This gives a bogus result: *)
gBogus[t_?NumericQ, e0_?NumericQ] := 
 NIntegrate[
  Exp[I t e]/(e^2 + e0^2) f[e], {e, -∞, ∞}, 
  Method -> {"DoubleExponentialOscillatory", 
    "SymbolicProcessing" -> 0}]

(* This gives *a* result, different from above despite being equivalent *)
g[t_?NumericQ, e0_?NumericQ] := 
 NIntegrate[Exp[I t e]/(e^2 + e0^2) f[e], {e, -\[Infinity], 0}, 
   Method -> {"DoubleExponentialOscillatory", 
     "SymbolicProcessing" -> 0},
   EvaluationMonitor :> Print["e=", e]] +
  NIntegrate[Exp[I t e]/(e^2 + e0^2) f[e], {e, 0, \[Infinity]}, 
   Method -> {"DoubleExponentialOscillatory", 
     "SymbolicProcessing" -> 0},
   EvaluationMonitor :> Print["e=", e]]

结果:

In[18]:= Timing@g[10,1]
Out[18]= {78.0828, 0.0000704303 + 9.78009*10^-6 I}

In[338]:= Timing@g[1,1]
Out[338]= {14.3125,0.389542 +0.024758 I}

我让Mathematica在符号预处理上花费了零时间,因为在这种情况下,它无论如何都无法找出有用的东西。我还告诉它为第二个积分专门使用振荡正交方法。

我为什么用随机整合策略(见摆弄猜测NIntegrateIntegrationStrategies)的作品在所有的是,有时数学可能会意外地自动选择一个糟糕的战略,查杀性能,而任何我要求它做的是至少有一点,如果不理想,甚至有意义。您也可以考虑在/mathematica/上获得帮助,他们可能会在那里了解有关Mathematica内部的更多信息。


k40g[t,e0]

fEp1p2EEk42×(0,)

p1个p2Ëp1,2k4

@ArturodonJuan我认为答案的工作方式并没有真正的区别,只是数字会改变。
基里尔'18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.