Ich versuche numerisch das folgende Integral mit NumPy und quad
von scipy.integrate
zu lösen. Der Code ist ein bisschen arbeiten, aber ich unechte Kerben in den resultierenden Daten:Falsche Kerben in numerischen Integrationsergebnissen unter Verwendung von Quad von scipy.integrate
Jeder hat eine Idee, warum sie auftreten und wie man das richtige glatte Ergebnis zu bekommen?
Hier ist der ursprüngliche Code in 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()
Haben Sie versucht, und schauen Sie sich die zusätzlichen Informationen Quad zurückkehrt? Sie könnten Ihre Integrationsfunktion an eine globale (z. B. eine Liste) angehängt haben und sie dann nach der Vektorschleife untersuchen. –