这些振荡是什么?

计算科学 插值 一体化 数学 振荡
2021-12-07 11:40:33

我有一个数值定义它的衰减比高斯要慢得多,但仍比简单的逆幂要快。g(x)

在此处输入图像描述

我需要为的函数调用在计算上是昂贵的,所以我定义了的插值- 称之为的某个巨大范围内-40,并将其用于我的积分。f(t)F[g(x)](t)tg(x)g(x)gint(x)x40<x<40

f(t)=cos(tx)g(x)dxLLcos(tx)gint(x)dx

然而,当我计算傅里叶变换的近似值时,我得到了一些我最初没想到的奇怪振荡。

在此处输入图像描述

正如我在上图中所指出的,振荡的“周期”约为 15.7。我的第一个猜测是,这可能是积分抵消的交替性质的产物,但这并不能解释观察到的 15.7 的“周期”。

Tguess=2πL0.157

这与我观察到的结果正好相差 100 倍(是的,我已经检查过我是否正确定义了积分和水平轴)。这怎么可能?


编辑#1:插值细节

我正在使用 Mathematica 的内置 进行Interpolation插值,它使用三次曲线在连续点之间进行插值(因此在每个点上定义了最多 2 个导数)。我专门在的范围内的步长进行插值。ndg(x)40<x<40dx=40/100=0.4

事实上,现在我写了这个,我意识到它很可能是我有限采样的产物,因为:

Tguess #2=2πdx=2π0.4=15.7

我将不胜感激任何进一步的帮助,特别是克服这个问题的好方法。


编辑#2:函数g(x)

h[x_?NumericQ, En_?NumericQ, pz_?NumericQ] := 
 1./(En^2 + pz^2 + 0.24^2)*
  NIntegrate[((Sqrt[
      0.316/(1. + 
         1.2*((k4 + 0.5*En)^2 + kp + (x*pz)^2))^1.*0.316/(1. + 
         1.2*((k4 - 0.5*En)^2 + kp + ((1. - x)*pz)^2))^1.])*((1. - 
         x)*0.316/(1. + 1.2*((k4 + 0.5*En)^2 + kp + (x*pz)^2))^1. + 
      x*0.316/(1. + 
         1.2*((k4 - 0.5*En)^2 + kp + ((1. - x)*pz)^2))^1.))/(((k4 + 
        0.5*En)^2 + 
      kp + (x*pz)^2 + (0.316/(1. + 
         1.2*((k4 + 0.5*En)^2 + kp + (x*pz)^2))^1.)^2)*((k4 - 
        0.5*En)^2 + 
      kp + ((1. - x)*
        pz)^2 + (0.316/(1. + 
         1.2*((k4 - 0.5*En)^2 + 
            kp + ((1. - x)*
              pz)^2))^1.)^2)), {k4, -\[Infinity], \[Infinity]}, {kp, 
    0, \[Infinity]}, Method -> "LocalAdaptive", 
   MaxRecursion -> 
    100]; (*LocalAdaptive seems to work slightly faster *)

g[x_]:=h[0.5,x,2.]; (*this is the function*)
1个回答

我想提另一个想法,以防万一。替换的截断错误LL是在顺序

Lcos(tx)g(x)dx=1tsin(tx)g(x)|LLsintxtg(x)dx=1Lg(L)sin(tL)+asymptotically smaller terms.
我取了一个省略的区间,使用了部分积分,并假设g衰减速度比g,这通常是合理的。

如果g(L)像幂一样衰减,而不是指数衰减或像高斯衰减,然后g(L)可能衰减得不够快,无法抑制傅里叶积分截断误差中的前项,然后您会看到振荡误差。一个重要的结果是,即使插值步骤非常准确,该误差仍会存在。