Python 使用fftconvolve的数值积分误差

Python 使用fftconvolve的数值积分误差,python,fft,convolution,numerical-integration,Python,Fft,Convolution,Numerical Integration,我的代码中存在一些数字错误,这些错误会不断传播,与Python中卷积的实现有关;这是一种挣扎,我的进步,我真的很感谢一些建议在这里 问题:我想使用快速傅立叶变换算法对两个(复)信号$f,g$的卷积积分进行数值计算,因此我使用的是scipy.signal.fftconvolve。这两个信号定义在由等间距点“x”组成的网格上,其实部和虚部如下所示: 其中,蓝线对应于$f[x]$,虚线对应于$g[x]$,第一个图形表示实际零件。问题是我想得到y[x]=(f*g)[x],这样积分得到的函数$y[x]

我的代码中存在一些数字错误,这些错误会不断传播,与Python中卷积的实现有关;这是一种挣扎,我的进步,我真的很感谢一些建议在这里

问题:我想使用快速傅立叶变换算法对两个(复)信号$f,g$的卷积积分进行数值计算,因此我使用的是
scipy.signal.fftconvolve
。这两个信号定义在由等间距点“x”组成的网格上,其实部和虚部如下所示:

其中,蓝线对应于$f[x]$,虚线对应于$g[x]$,第一个图形表示实际零件。问题是我想得到y[x]=(f*g)[x],这样积分得到的函数$y[x]$在与f和g完全相同的x网格点上求值。然后我使用:

y = dx*scipy.signal.fftconvolve( f, g, mode="same" )
 
我得到以下信息:

蓝色的$y[x]$的实部,橙色为虚部。如果我理解正确,使用
fftconvolve
上的
mode=“same”
应该精确地提供点x原始网格上的卷积积分值

问题与边缘有关;在我看来,这些值是由于零填充或类似的原因而产生的某种错误。函数f和g在无穷远处衰减为0(实际上,f应该衰减为0,g应该衰减为常数值),但是f和g的支持似乎比用于此积分的网格大得多。从分析上讲,积分的范围是无限的(积分的极限是-+无穷大),但这里,$x$的最大值作为积分的极限。结果,这个错误在我的代码中传播,导致边缘的解不稳定。有人能就如何解决这些问题提供一些建议或方法吗