Сравнение числовой и аналитической свертки - PullRequest
0 голосов
/ 04 июня 2018

Я вычисляю свертку двух функций, 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 - я в конечном итоге хочу работать простов 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))
...