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:// | ||