livre TS Hatier spécialité physique
Représentez la concentration en diiode en mmol/L en fonction du temps
import numpy as np import matplotlib.pyplot as plt t = np.array([0,10,20,30,40,50,60,70]) C = np.array([0,8.5,12,14,15,16,17,17]) plt.grid() plt . xlabel ("temps en minute") plt . ylabel ("[I2] en mmol/L") plt.scatter(th, C, color='red') plt.show()
Réalisons un ajustement manuel à l’aide d’un modèle exponentiel en trouvant a et b tels que : [I2]=a*(1-exp(-t/b)) avec t en heure
import matplotlib.pyplot as plt import numpy as np t = np.array([0,10,20,30,40,50,60,70]) C_I2 = np.array([0,8.5,12,14,15,16,17,17]) t_h=t/60 t_model=np.linspace(0, 1.2, 50) def f(t,a,b): return a* (1-np.exp(-t/b)) while True: c=input("si voulez voulez vous continuer tapez oui?") if (c!="oui" ): break a=float(input( "a ? ")) b=float(input( "b ? ")) plt.scatter(t_h, C_I2,color="green") plt.plot(t_model, f(t_model,a,b)) plt.axis([0, 1.2, 0, 20]) plt.grid() plt.show()
Réalisons le même ajustement trouvant a et b tels que : [I2]=a*(1-exp(-t/b)) avec t en heure. modélisation exponentielle avec la librairie scipy (curve_fit)
import matplotlib.pyplot as plt from pylab import * import numpy as np import scipy from scipy.optimize import curve_fit t = np.array([0,10,20,30,40,50,60,70]) C_I2 = np.array([0,8.5,12,14,15,16,17,17]) t_h=t/60 t1=np.linspace(0,1.2,50) coef,cov=scipy.optimize.curve_fit(lambda t,a,b: a*(1-np.exp(-t/b)), t_h, C_I2) a=coef[0] b=coef[1] a=np.round(a,2) b=np.round(b,2) print("a= " ,a) print("b= " ,b) C1model=a*(1-np.exp(-t1/b)) plt . scatter(t_h ,C_I2,s=100,color ='yellow') time.sleep(5) plt . plot (t1 ,C1model,marker=".",color ='blue',markersize=1) plt . xlabel ("temps en h") plt . ylabel ("[I2] en mmol/L") plt . grid () plt .show()
Ecrire des lignes de code permettant de trouver le temps de demi-réaction. Convertir dans un second temps ces lignes de code en fonction python.
import numpy as np t1=np.linspace(0,1.2,50) C1model=16.92757841*(1-np.exp(-t1/0.26624731)) i=0 while C1model[i]<17/2: t_demi=(t1[i]+t1[i+1])/2 i=i+1 print(np.round(t_demi,3),"h")
import numpy as np t1=np.linspace(0,1.2,50) C1model=16.92757841*(1-np.exp(-t1/0.26624731)) def temps_demi(t,c): i=0 while c[i]<17/2: t_demi=(t[i]+t[i+1])/2 i=i+1 print(np.round(t_demi,3),"h") temps_demi(t1,C1model)
Déterminer les concentration en peroxodisulfate
mauvaise méthode
C_I2 = [0,8.5,12,14,15,16,17,17] C_S2O8=17-C_I2 print(C_S2O8)
Une solution
import numpy as np C_I2 = np.array([0,8.5,12,14,15,16,17,17]) C_S2O8=[17-val for val in C_I2] print(C_S2O8)
Une autre solution
import numpy as np C_I2 = np.array([0,8.5,12,14,15,16,17,17]) C_S2O8=17-C_I2 print(C_S2O8)
Tracer les deux courbes (diiode et peroxodisulfate) avec les modélisations
import matplotlib.pyplot as plt import numpy as np import scipy from scipy.optimize import curve_fit t = np.array([0,10,20,30,40,50,60,70]) C_I2 = np.array([0,8.5,12,14,15,16,17,17]) t_h=t/60 t1=np.linspace(0,1.2,50) coef,cov=scipy.optimize.curve_fit(lambda t,a,b: a*(1-np.exp(-t/b)), t_h, C_I2) a=coef[0] b=coef[1] C1model=a*(1-np.exp(-t1/b)) plt . scatter(t_h ,C_I2,s=100,color ='gold') plt . plot (t1 ,C1model,marker=".",color ='gold',markersize=1) C_S2O8=17-C_I2 C2model=17-C1model plt . scatter(t_h ,C_S2O8,s=100,color ='green') plt . plot (t1 ,C2model,marker=".",color ='green',markersize=1) plt . xlabel ("temps en h") plt . ylabel ("[I2] en mmol/L") plt . grid () plt .show()
Représenter la vitesse de formation de I2 en fonction du temps. Utilisez le modèle [I2] = 16.927*(1-np.exp(-t1/0.266))
import matplotlib.pyplot as plt import numpy as np t1=np.linspace(0,1.2,50) C1model=16.92757841*(1-np.exp(-t1/0.26624731)) vI2=[] for i in range (49): v=(C1model[i+1]-C1model[i])/(t1[i+1]-t1[i]) v=np.round(v/60,2) vI2.append(v) plt . scatter(t1[:49] ,vI2,s=100,color ='gold') plt . xlabel ("temps en h") plt . ylabel ("vitesse de formation de I2 en mmol/L/h") plt . grid () plt .show()