Я вычисляю свертку двух функций, 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]]
, я получу решение
Тогда, если я построю это решение вPython, и сравните его с результатом числовой свертки scipy.signal.fftconvolve
, они не согласуются друг с другом.X-перехваты выглядят нормально, но есть проблема с вертикальным масштабированием.
Контекст: это MWE - я в конечном итоге хочу работать простов Python после нахождения аналитического решения в Mathematica.Было бы проще использовать явное выражение вместо вычисления числовой свертки.
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))