Différences
Ci-dessous, les différences entre deux révisions de la page.
teaching:progappchim:fit_modele_einstein [2014/03/14 15:06] – créée villersd | teaching:progappchim:fit_modele_einstein [2015/04/01 15:47] (Version actuelle) – villersd | ||
---|---|---|---|
Ligne 7: | Ligne 7: | ||
Le programme Python nécessite les librairies scipy (optimisation), | Le programme Python nécessite les librairies scipy (optimisation), | ||
- | <sxh python; title : fit-Cv-diamant-Einstein-03.py> | + | <sxh python; title : fit-Cv-diamant-Einstein-04.py> |
# | # | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
Ligne 13: | Ligne 13: | ||
Fit des données (température absolue, chaleur spécifique molaire à volume constant | Fit des données (température absolue, chaleur spécifique molaire à volume constant | ||
Diamant | Diamant | ||
- | Modèle d' | + | Modèle d' |
""" | """ | ||
import numpy as np | import numpy as np | ||
Ligne 20: | Ligne 20: | ||
import matplotlib.pyplot as plt | import matplotlib.pyplot as plt | ||
- | def cvEinstein(T,TE): | + | def cvEinstein(Tr): |
# fonction à fitter | # fonction à fitter | ||
- | return 3.*NA*kB*(TE/T)**2*sp.exp(TE/T)/(sp.exp(TE/T)-1)**2 | + | |
+ | | ||
def residuals(p, | def residuals(p, | ||
# erreur entre y donné et y calculé | # erreur entre y donné et y calculé | ||
- | return cvEinstein(x,p[0]) - y | + | return cvEinstein(x/p[0]) - y |
Ligne 71: | Ligne 72: | ||
p=[1000.] # valeur initiale de l' | p=[1000.] # valeur initiale de l' | ||
- | plsq = leastsq(residuals, | + | plsq = leastsq(residuals, |
# Résultat : | # Résultat : | ||
print " | print " | ||
Ligne 77: | Ligne 78: | ||
# graphe | # graphe | ||
x=np.linspace(1., | x=np.linspace(1., | ||
- | plt.plot(x, | + | plt.plot(x, |
plt.title(u' | plt.title(u' | ||
# | # | ||
Ligne 93: | Ligne 94: | ||
{{: | {{: | ||
- | Le modèle de Debye, qui utilise un spectre de fréquences plutôt qu'une fréquence unique de vibration, pourra remplacer le modèle d' | + | Le modèle de Debye, qui utilise un spectre de fréquences plutôt qu'une fréquence unique de vibration, pourra remplacer le modèle d' |
+ | |||
+ | <sxh python; title : fit-Cv-diamant-Debye-02.py> | ||
+ | # | ||
+ | # -*- coding: utf-8 -*- | ||
+ | """ | ||
+ | Fit des données (température absolue, chaleur spécifique molaire à volume constant | ||
+ | Diamant | ||
+ | Modèle de Debye : http:// | ||
+ | """ | ||
+ | import numpy as np | ||
+ | import scipy as sp | ||
+ | from scipy.optimize import leastsq | ||
+ | from scipy import integrate | ||
+ | from scipy.integrate import simps | ||
+ | import matplotlib.pyplot as plt | ||
+ | |||
+ | def f(x): | ||
+ | return x**4.*sp.exp(x)/ | ||
+ | |||
+ | def cvDebye(Tr): | ||
+ | # Chaleur spécifique théorique (modèle de Debye) | ||
+ | # Tr = température réduite = T/TD | ||
+ | # problème : integrate.quad n' | ||
+ | # http:// | ||
+ | #solution : | ||
+ | if ' | ||
+ | return 9.*NA*kB*(Tr)**3 *np.array([integrate.quad(f, | ||
+ | else: | ||
+ | return 9.*NA*kB*(Tr)**3 * integrate.quad(f, | ||
+ | |||
+ | def residuals(p, | ||
+ | # erreur entre y donné et y calculé | ||
+ | return cvDebye(x/ | ||
+ | |||
+ | |||
+ | kB = 1.3806488E-23 | ||
+ | NA = 6.02214129E23 | ||
+ | # données expérimentales (T, Cv) : | ||
+ | liste_data=[ | ||
+ | [12.9, | ||
+ | [16.1, | ||
+ | [19.8, | ||
+ | [24.1, | ||
+ | [30.1, | ||
+ | [33.4, | ||
+ | [41.3, | ||
+ | [47.7, | ||
+ | [57.2, | ||
+ | [67, | ||
+ | [76.1, | ||
+ | [87, | ||
+ | [100.4, | ||
+ | [113.1, | ||
+ | [126.3, | ||
+ | [143.4, | ||
+ | [159, | ||
+ | [176, | ||
+ | [197, | ||
+ | [215, | ||
+ | [264, | ||
+ | [273, | ||
+ | [280, | ||
+ | [306, | ||
+ | [335, | ||
+ | [363, | ||
+ | [412, | ||
+ | [471, | ||
+ | [516, | ||
+ | [874, | ||
+ | [1079, | ||
+ | [1238, | ||
+ | |||
+ | # transformation en tableau numpy | ||
+ | data=np.array(zip(*liste_data)) | ||
+ | # cf. http:// | ||
+ | |||
+ | p=[1000.] # valeur initiale de l' | ||
+ | plsq = leastsq(residuals, | ||
+ | # Résultat : | ||
+ | print " | ||
+ | |||
+ | # graphe | ||
+ | x=np.linspace(1., | ||
+ | plt.plot(x, | ||
+ | plt.title(u' | ||
+ | # | ||
+ | plt.show() | ||
+ | </ | ||
===== Références ===== | ===== Références ===== | ||
* [[http:// | * [[http:// |