Я хочу вычислить свертку в Python путем явной оценки интеграла
и сравнение результата с тем, что я получаю от fftconvolve
. Интеграл будет рассчитываться с использованием quad
:
import numpy as np
from scipy.integrate import quad
from scipy.signal import fftconvolve
import matplotlib.pyplot as plt
from sympy import symbols
def f(x,a,b):
return np.exp(-(x-a)**2/b)
def g(x,a,b):
return np.exp(-(x-np.pi*a)**2/(2.9*b))
x = symbols('x')
a = 1.2
b = 4.7
t = np.linspace(-100,100,int(1e4))
dt = t[1] - t[0]
h1 = fftconvolve(f(t,a,b),g(t,a,b),mode='same')*dt
h2,_ = quad(f(t,a,b)*g(x-t,a,b),-np.inf,np.inf,epsabs=0,epsrel=1e-6,args=(a,b))
x = np.linspace(-100,100,int(1e4))
plt.figure()
plt.plot(t,h1,label='fftconvolve')
plt.plot(x,h2,label='brute force')
plt.legend()
plt.show()
Я получаю ошибку AttributeError: 'Mul' object has no attribute 'exp'
, которая относится к строке h2,_ = quad(...
, когда она вызывается quad
.
Что означает эта ошибка и является ли это подходящим способом использования quad
для оценки интеграла?