首页 > 解决方案 > 使用 fftconvolve 的数值积分错误

问题描述

我的代码中有一些持续传播的数字错误,这与 Python 中卷积的实现有关;这让我的进步有点挣扎,我真的很感激这里的一些建议。

问题:我想使用快速傅里叶变换算法对两个(复杂)信号 $f,g$ 的卷积积分进行数值计算,所以我使用scipy.signal.fftconvolve. 这两个信号定义在等距点“x”的网格上,它们的实部和虚部如下所示: 在此处输入图像描述

在此处输入图像描述

其中蓝线对应$f[x]$,虚线对应$g[x]$,第一个数字代表实部。问题是我想得到 y[x] = ( f*g )[x] 以便在与 f 和 g 完全相同的 x 网格点处对积分产生的函数 $y[x]$ 进行评估。然后我正在使用:

y = dx*scipy.signal.fftconvolve( f, g, mode="same" )
 

我得到以下信息:

在此处输入图像描述

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

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

标签: pythonfftconvolutionnumerical-integration

解决方案


推荐阅读