{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[{"file_id":"147fmQHAFjN1-hAQYPviSdn5ByqYhrDTP","timestamp":1768900475950}],"authorship_tag":"ABX9TyP+mKoB2Y+oHfr2rsNObbTo"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["Dosage conductimétrique d'une solution d'ion baryum par une solution de sulfate de sodium"],"metadata":{"id":"YQWjohMsSAQg"}},{"cell_type":"code","source":["import matplotlib.pyplot as plt#Pour tracer des graphiques\n","import numpy as np #Pour faire divers calculs\n","import numpy.random as rd\t#Importe la fonction de tirage aléatoire rectangulaire\n","from matplotlib.widgets import Cursor\n","\n","## Courbe de dosage\n","x=np.array(['à remplir']) # valeur du volume en mL\n","sigma=np.array(['à remplir']) # valeur de la conductivité en µS/cm\n","\n","#calcul de la conductivité corrigée en µS*L/cm\n","y=sigma*(100+x)*0.001\n","#Régression linéaire avec np.polyfit\n","x1=x[0:10] # abscisses premier segment\n","y1=y[0:10] # ordonnées premier segment\n","p1=np.polyfit(x1, y1, 1) #Régression linéaire premier segment (équation y = p1[0]*x+p1[1])\n","\n","x2=x[13:22] # abscisses deuxième segment\n","y2=y[13:22] # ordonnées deuxième segment\n","p2=np.polyfit(x2, y2, 1) #Régression linéaire deuxième segment (équation y = p2[0]*x+p2[1])\n","\n","# Courbe et droite de régression\n","\n","plt.figure(figsize=(12,10))\n","plt.xlabel('volume en mL')\t#Légende de l’axe des abscisses\n","plt.ylabel('conductivité corrigée en µS*L/cm')\t#Légende de l’axe des ordonnées\n","plt.plot(x,y,'b+',label='points') #Tracé des points expérimentaux en bleu\n","plt.plot(x,np.polyval(p1,x),'r',label='modèle 1') #Tracé de la première droite en rouge\n","plt.plot(x,np.polyval(p2,x),'g',label='modèle 2') #Tracé de la deuxième droite en vert\n","plt.xlim(0, 11) #limite axe abscisse\n","plt.ylim(100, 250) #limite axe ordonnée\n","plt.title('Dosage conductimétrique d\\'une solution d\\'ion baryum') #Titre du graphe\n","plt.legend()\t#Affiche l’étiquette de la courbe\n","plt.grid()\t#Affiche le quadrillage\n","\n","# définition curseur\n","cursor = Cursor(plt.gca(), color=\"black\", lw=1)\n","\n","plt.show()\t#Affiche le graphique\n","\n","#print('pente_1 =',p1[0]) #Affiche la pente de la première droite\n","#print('y0_1 =', p1[1]) #Affiche la première ordonnée à l’origine\n","\n","#print('pente_2 =',p2[0]) #Affiche la pente de la deuxième droite\n","#print('y0_2 =', p2[1]) #Affiche la deuxième ordonnée à l’origine\n","\n","Ve=(p2[1]-p1[1])/(p1[0]-p2[0]) #Calcule l'intersection\n","print(\"Ve = \",format(Ve,\"#.2f\"),\" mL\") #Affiche le volume équivalent\n","\n","#Calcul de la concentration et de l'incertitude par méthode Monte-Carlo\n","\n","C1 = 0.10  #concentration de la solution titrante de sulfate de sodium en mol/L\n","u_C1=0.01*C1 #incertitude de C1\n","V_0=10.0  #volume prélevé de la solution titrée en mL\n","m_V=0.05 #demi-étendu de V et Ve\n","\n","C0=(C1*Ve/(V_0))\n","\n","N_sim =10000 \t#Nombre de tirage\n","C1_list=rd.normal(C1, u_C1, N_sim) #vecteur de N_sim valeurs aléatoires de C1\n","Ve_list=rd.uniform(Ve-m_V, Ve+m_V, N_sim) #vecteur de N_sim valeurs aléatoires de Ve\n","V_0_list=rd.uniform(V_0-m_V, V_0+m_V, N_sim) #vecteur de N_sim valeurs aléatoires de Ve\n","\n","C0_list=(C1_list*Ve_list/(V_0_list))\n","\n","C0_moy=np.mean(C0_list) #moyenne de C0\n","u_C0_calc= np.std(C0_list, ddof=1) #écart-type de C0\n","\n","print (\"La concentration des ions baryum est de  : \" , format(C0, \"#.2e\"),  \"en mol/L\")\n","print (\"C0_moyen =\",format(C0_moy,\"#.3e\"),\" avec écart-type = \",format(u_C0_calc,\"#.1e\"))\n","#Affiche C0 moyen et son incertitude type"],"metadata":{"id":"Q5hcDo73REuP"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["Dosage  d'une solution acide d'ions aluminium III par les ions hydroxyde suivi par pHmétrie"],"metadata":{"id":"wJIcPhGUSOY4"}},{"cell_type":"code","source":["import matplotlib.pyplot as plt #Pour tracer des graphiques\n","import numpy as np #Pour faire divers calculs\n","import numpy.random as rd\t#Importe la fonction de tirage aléatoire rectangulaire\n","from scipy.interpolate import make_interp_spline #Importe la fonction pour faire le lissage\n","from scipy.signal import find_peaks #pour trouver les max\n","from matplotlib.widgets import Cursor\n","\n","## Données dosage\n","\n","V = np.array(['à remplir']) # valeur du volume en mL\n","pH = np.array(['à remplir']) # valeur de la pH en mV\n","\n","## Définition de  la dérivée\n","\n","def derivee(x,y):\n","    return (y[2:]-y[:-2])/(x[2:]-x[:-2])\n","\n","der_pH = derivee(V, pH)\n","\n","V_sub = V[1:-1] # on redimensionne les valeurs de V pour qu'elles soient de même taille que der_pH\n","\n","##Affichage graphique\n","\n","plt.figure(figsize=(12,10))\n","\n","plt.gcf().subplots_adjust(left = 0.1, bottom = 0.2, right = 0.9, top =0.9, wspace = 0.5, hspace = 0.5)\n","\n","#Courbe du dosage\n","\n","plt.subplot(2,1,1)\n","plt.plot(V, pH, '+-', color= 'purple', label=\"pH\")\n","plt.xlabel(\"V (mL)\")\n","plt.ylabel(\"pH\")\n","plt.grid(linestyle='-.')\n","plt.title(\"Courbe du dosage pHmétrique des ions aluminium III par les ions hydroxyde\")\n","plt.legend()\n","\n","#Courbe dérivée lissé\n","\n","plt.subplot(2,1,2)\n","plt.xlabel(\"V (mL)\") #Légende de l’axe des abscisses\n","plt.ylabel(\"dérivée\") #Légende de l’axe des ordonnées\n","V_new = np.linspace(min(V_sub), max(V_sub), 300) #Définit le nombre de point (300) à tracer pour V\n","f = make_interp_spline(V_sub, der_pH, k=2)#Définit la fonction de lissage d’ordre k = 2\n","y_smooth = f(V_new) #Attribution des ordonnées aux abscisses\n","plt.plot(V_new, y_smooth, 'b-',label=\"dérivée\") #Représente la dérivée en fonction de V en bleu de manière continue avec une étiquette pour la courbe\n","peaks, _ = find_peaks(y_smooth,height=1) #cherche 2 maxima\n","plt.title(\"évolution de la dérivée\") #Titre du graphe\n","plt.legend()#Affiche l’étiquette de la courbe\n","plt.grid() #Affiche le quadrillage\n","\n","# définition curseur\n","cursor = Cursor(plt.gca(), color=\"black\", lw=1)\n","\n","plt.show() #Affiche le graphique\n","\n","#Volume équivalent du dosage\n","\n","print(V_new[peaks])\t#Affiche le résultat des deux maxima\n","\n","Ve1=V_new[peaks][0]\t#Attribue la valeur du premier maximum\n","print(\"Ve1 = \",format(Ve1,\"#.2f\"), \"mL\")\t#Affiche le résultat\n","\n","Ve2=V_new[peaks][1]\t#Attribue la valeur du second maximum\n","print(\"Ve2 = \",format(Ve2,\"#.2f\"), \"mL\")\t#Affiche le résultat\n","\n","Ve3=V_new[peaks][2]\t#Attribue la valeur du troisième maximum\n","print(\"Ve3 = \",format(Ve3,\"#.2f\"), \"mL\")\t#Affiche le résultat\n","\n","Ve=Ve2-Ve1\n","\n","#Calcul de la concentration et de l'incertitude par méthode Monte-Carlo\n","\n","Cb = 0.15  #concentration de la solution titrante de potasse en mol/L\n","u_Cb=0.01*Cb #incertitude de Cb\n","V_0=20.0  #volume prélevé de la solution titrée en mL\n","m_V=0.05 #demi-étendu de V et Ve\n","\n","C=(Cb*Ve/(3*V_0))\n","\n","N_sim =10000 \t#Nombre de tirage\n","Cb_list=rd.normal(Cb, u_Cb, N_sim) #vecteur de N_sim valeurs aléatoires de Cb\n","Ve_list=rd.uniform(Ve-m_V, Ve+m_V, N_sim) #vecteur de N_sim valeurs aléatoires de Ve\n","V_0_list=rd.uniform(V_0-m_V, V_0+m_V, N_sim) #vecteur de N_sim valeurs aléatoires de Ve\n","\n","C_list=(Cb_list*Ve_list/(3*V_0_list))\n","\n","C_moy=np.mean(C_list) #moyenne de C\n","u_C_calc= np.std(C_list, ddof=1) #écart-type de C\n","\n","print (\"La concentration des ions aluminium est de  : \" , format(C, \"#.2e\"),  \"en mol/L\")\n","print (\"C_moyen =\",format(C_moy,\"#.3e\"),\" avec écart-type = \",format(u_C_calc,\"#.1e\"))\n","#Affiche C moyen et son incertitude type"],"metadata":{"id":"RJ2nm8CP_zzN"},"execution_count":null,"outputs":[]}]}