Ich habe die folgende Funktion, die ich numerisch möchte integrieren Python verwenden,Scipy integrate.quad nicht die erwarteten Werte Rückkehr
scipy verwenden, ich diesen Code geschrieben haben:
def voigt(a,u):
fi = 1
er = Cerfc(a)*np.exp(np.square(a))
c1 = np.exp(-np.square(u))*np.cos(2*a*u)
c1 = c1*er #first constant term
pis = np.sqrt(np.pi)
c2 = 2./pis #second constant term
integ = inter.quad(lambda x: np.exp(-(np.square(u)-
np.square(x)))*np.sin(2*a*(u-x)), 0, u)
print integ
ing = c1+c2*integ[0]
return ing
Für die Cerfc (a) -Funktion, verwende ich nur scipy.erfc, um die komplementäre Fehlerfunktion zu berechnen.
Also funktioniert diese Funktion wirklich gut für niedrige Werte von u, aber große Werte (über 60 ish) bricht den Code und ich ger sehr sehr kleine Zahlen. Zum Beispiel, wenn ich a = 0,01 und u = 200, ist das Ergebnis 1.134335928072937e-40, wo die wahre Antwort geben: 1.410526851411200e-007
Zusätzlich dazu, SciPy kehrt der Fehler für die Quad-Berechnung in einer ähnlichen Reihenfolge wie die Antwort. Ich bin wirklich hier ratlos und würde wirklich Hilfe zu schätzen wissen.
Dies ist für eine Hausaufgabe, aber es ist ein Physikkurs. Diese Berechnung ist also nur ein Schritt in einer größeren Frage in der Physik. Sie werden helfen, mich nicht zu betrügen, wenn Sie mir helfen :)
Ist es Teil Ihrer Aufgabe, 'quad' oder andere spezifische scipy-Funktionen zu verwenden? Oder brauchst du nur eine funktionierende Implementierung der Voigt-Funktion? –
Es muss einfach funktionieren. Vielen Dank – handroski