je la fonction suivante que je voudrais intégrer numériquement en utilisant python,Scipy integrate.quad ne pas retourner les valeurs attendues
En utilisant scipy, j'ai écrit ce code:
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
Pour la fonction Cerfc (a), j'utilise simplement scipy.erfc pour calculer la fonction d'erreur complémentaire.
Cette fonction fonctionne donc très bien pour les valeurs faibles de u, mais les valeurs les plus grandes (au-delà de 60 ish) cassent le code et j'obtiens de très petits nombres. Par exemple, si j'entre a = 0.01 et u = 200, le résultat est 1.134335928072937e-40, où la vraie réponse est: 1.410526851411200e-007
En plus de cela, le retour d'erreur scipy pour le calcul quad est sur un ordre similaire à la réponse. Je suis vraiment perplexe ici et j'apprécierais vraiment l'aide.
Ceci est pour un devoir de devoirs mais c'est un cours de physique. Ce calcul n'est donc qu'une étape dans une question plus large en physique. Vous ne serez pas me contribuerez triche si vous me aider :)
Est-ce que cela fait partie de votre mission d'utiliser 'quad 'ou d'autres fonctions scipy spécifiques? Ou avez-vous juste besoin d'une implémentation fonctionnelle de la fonction Voigt? –
Il suffit de travailler. Je vous remercie – handroski