我正在计算两个函数exp(-bt^2 + iat)
和exp(-c|t| + iat)
的卷积。如果尝试使用
Convolve[Exp[-b*t^2 + I*a*t], Exp[-c*Abs[t] + I*a*t], t, \[Tau]]
我得到了解决方案
然后,如果我在Python中绘制此解决方案,并将其与数值卷积scipy.signal.fftconvolve
的结果进行比较,则它们彼此不一致。 x截距似乎没问题,但垂直缩放存在问题。
上下文:这是一个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))
答案 0 :(得分:0)
您必须将最终结果与步长相乘。如果您将卷积积分写为黎曼和,您会发现它与数值定义的 dx 不同。