Я пытаюсь решить численно следующий интеграл, используя NumPy и quad
от scipy.integrate
. Код вроде работает, но я получаю ложные вырезы в результате данных:Локальные вырезы в результатах цифровой интеграции с использованием quad от scipy.integrate
Кто-нибудь имеет представление о том, почему они встречающиеся и как получить правильный результат гладкого?
Вот исходный код в Python:
#!/usr/bin/env python
import numpy as np
from scipy.integrate import quad
import matplotlib.pyplot as pl
numpts = 300
t_min = -4
t_max = 100
tt = np.linspace(t_min, t_max, numpts)
mean = 0. # ps
fwhm = .05 # ps
def gaussian(x, mean, fwhm):
return 1./np.sqrt(np.pi)/fwhm * np.exp(-1. * (x - mean)**2/fwhm**2)
def integrand(t_, t, mean, fwhm):
denum = np.sqrt(t - t_)
r = gaussian(t_, mean, fwhm)/denum
return r
def integrate(t, mean, fwhm, tmin):
return quad(integrand, tmin, t - 1e-9, args=(t, mean, fwhm))[0]
if __name__ == '__main__':
vec_int = np.vectorize(integrate)
y = vec_int(tt, mean, fwhm, tt.min())
fig = pl.figure()
ax = fig.add_subplot(111)
ax.plot(tt, y, 'bo-', mec='none')
ax.set_xlim(-5, 101)
pl.show()
вы ли попробовать и посмотреть на дополнительные возвращается информация каре? Вы можете добавить свою интегральную функцию к глобальному (например, списку), а затем проверить его после векторного цикла. –