Явно рассчитать свертку в Python - PullRequest
0 голосов
/ 17 мая 2019

Я хочу вычислить свертку в Python путем явной оценки интеграла

convolution

и сравнение результата с тем, что я получаю от 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 для оценки интеграла?

...