比较数值和分析卷积

时间:2018-06-04 06:45:26

标签: python wolfram-mathematica convolution

我正在计算两个函数exp(-bt^2 + iat)exp(-c|t| + iat)的卷积。如果尝试使用

在Mathematica中进行分析计算
Convolve[Exp[-b*t^2 + I*a*t], Exp[-c*Abs[t] + I*a*t], t, \[Tau]]

我得到了解决方案

enter image description here

然后,如果我在Python中绘制此解决方案,并将其与数值卷积scipy.signal.fftconvolve的结果进行比较,则它们彼此不一致。 x截距似乎没问题,但垂直缩放存在问题。

enter image description here

上下文:这是一个MWE - 在Mathematica中找到解析解后,我最终想在Python中工作。使用显式表达式而不必计算数值卷积会更简单。

import numpy as np
from scipy.special import erfc
from scipy.signal import fftconvolve
import matplotlib.pyplot as plt

t = np.arange(-100,100,1e6) # time

a = np.random.rand()
b = np.random.rand()
c = np.random.rand()

x = np.exp(-b*t**2+1j*a*t)
y = np.exp(-c*abs(t)+1j*a*t)
z = 2*np.sqrt(np.pi/b)*np.exp(1j*a*t+c**2/(4*b)) * ( \
             np.exp(-c*t)*erfc((c-2*b*t)/2*np.sqrt(b)) + \
             np.exp(c*t)*erfc((c+2*b*t)/2*np.sqrt(b)) )

zc = fftconvolve(x,y,mode='same')*(t[1]-t[0])

plt.figure(1,figsize=(12,4))

plt.subplot(121)
plt.plot(t,np.real(zc),'--',label='conv')
plt.plot(t,np.real(z),label='analytic')
plt.xlabel('time')
plt.title('real part')
plt.legend(loc='best')
plt.grid()
plt.xlim((-20,20))

plt.subplot(122)
plt.plot(t,np.imag(zc),'--',label='conv')
plt.plot(t,np.imag(z),'-',label='analytic')
plt.xlabel('time')
plt.title('imag part')
plt.legend(loc='best')
plt.grid()
plt.xlim((-20,20))

1 个答案:

答案 0 :(得分:0)

您必须将最终结果与步长相乘。如果您将卷积积分写为黎曼和,您会发现它与数值定义的 dx 不同。