{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[{"file_id":"1gR3LNfK-o6BCJpxT_RLfhzYUN_ndJ_Y3","timestamp":1651746858056}],"authorship_tag":"ABX9TyNg9Jjk38cqBL5Wm9sD4rm/"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["Dosage des ions fer (II) par les ions permanganate 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']) #Volume en mL\n","ddp = np.array(['à remplir']) #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 fer (II) par les ions permanganate\")\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=V_new[n_max]\t#Attribue la valeur d’un élément du vecteur\n","print(\"Ve = \",format(Ve,\"#.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 = 'à remplir'  #concentration de la solution titrante de MnO4(-)  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*5/(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*5/(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 fer (II) 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":[]}]}