{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[{"file_id":"147fmQHAFjN1-hAQYPviSdn5ByqYhrDTP","timestamp":1764582891056}],"authorship_tag":"ABX9TyOsaSwo3mbBaZ5/3sOT5O57"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["Dosage conductimétrique d'une solution d'ion chlorure par une solution de nitrate d'argent"],"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é\n","\n","#calcul de la conductivité corrigée\n","y=sigma*(50+x)*0.001\n","#Régression linéaire avec np.polyfit\n","x1=x[0:9] # abscisses premier segment\n","y1=y[0:9] # 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[15:22] # abscisses deuxième segment\n","y2=y[15: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, 22) #limite axe abscisse\n","plt.ylim(20, 50) #limite axe ordonnée\n","plt.title('Dosage conductimétrique d\\'une solution d\\'ion chlorure') #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_1=(p2[1]-p1[1])/(p1[0]-p2[0]) #Calcule l'intersection\n","print(\"Ve_1 = \",format(Ve_1,\"#.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.020   #concentration de la solution titrante d'ion argent en mol/L\n","u_C1=0.01*C1 #incertitude de C1\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","C0=(C1*Ve_1/(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 Cb\n","Ve1_list=rd.uniform(Ve_1-m_V, Ve_1+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*Ve1_list/(V_0_list))\n","\n","C0_moy=np.mean(C0_list) #moyenne de Ca\n","u_C0_calc= np.std(C0_list, ddof=1) #écart-type de Ca\n","\n","print (\"La concentration des ions chlorure 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  des ions chlorure par les ions argent suivi par une méthode potentiométrique"],"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 matplotlib.widgets import Cursor\n","\n","## Données dosage\n","\n","V = np.array(['à remplir']) # valeur du volume en mL\n","ddp = np.array(['à remplir']) # valeur de la ddp 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_ddp = derivee(V, ddp)\n","\n","V_sub = V[1:-1] # on redimensionne les valeurs de Va pour qu'elles soient de même taille que der_ddp\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, ddp, '+-', color= 'purple', label=\"ddp\")\n","plt.xlabel(\"V (mL)\")\n","plt.ylabel(\"ddp\")\n","plt.grid(linestyle='-.')\n","plt.title(\"Courbe du dosage potentiométrique des ions chlorure par les ions argent\")\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_ddp, 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","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","y_max=np.amax(y_smooth) #Donne le maximum d’un vecteur\n","n_max=np.argmax(y_smooth)\t#Donne l’indice d’un élément d’un vecteur\n","Ve_2=V_new[n_max]\t#Attribue la valeur d’un élément du vecteur\n","print(\"Ve = \",format(Ve_2,\"#.2f\"), \"mL\")\t#Affiche le résultat\n","\n","#Calcul de la concentration et de l'incertitude par méthode Monte-Carlo\n","\n","C1 =0.020   #concentration de la solution titrante d'ion argent en mol/L\n","u_C1=0.01*C1 #incertitude de C1\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","C0=(C1*Ve_2/(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 Cb\n","Ve2_list=rd.uniform(Ve_2-m_V, Ve_2+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*Ve2_list/(V_0_list))\n","\n","C0_moy=np.mean(C0_list) #moyenne de Ca\n","u_C0_calc= np.std(C0_list, ddof=1) #écart-type de Ca\n","\n","print (\"La concentration des ions chlorure 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":"RJ2nm8CP_zzN"},"execution_count":null,"outputs":[]}]}