teaching:progappchim:solubilite_ph_t

Solubilité en fonction du pH et de la température

Interface en ligne de commande et graphiques matplotlib

Nécessite ce fichier de données (à décompresser).

<sxh python; title : evolution_solubilite_pH_T.py> #!/usr/bin/env python # -*- coding: utf-8 -*- “”“ Solubilité en fonction du pH et de la température Basé sur le travail de ML et PT, ba2 chimie 2013-2014 ”“”

### Importation des données import csv #Importe le module pour lire une liste externe ifile = open(“Bibliotheque.csv”, “rb”) #ouvre le fichier .csv reader = csv.reader (ifile, delimiter= ';') #lit le fichier .csv

precipites = [] #initialise la liste avec tout les précipités for row in reader: #pour toutes les colonnes

  precipites.append(row) #ajoute la liste de chaque précipité

### Choix du précipité

m = 0 #nombre servant à attribuer à chaque précipité un nombre pour faciliement le sélectionner precipite = [] #initialise la liste avec un précipité particulier for precipite in precipites: #pour chaque précipité de la liste reprenant tout les précipités

  print m, "--->", precipite [0]  #Affiche le numéro du précipité ainsi que le précipité
  m = m + 1   #augmente m de 1 à chaque tour

p = input(“choisissez le précipité dont vous désirez étudier la solubilité ”) #permet à l'utilisiteur de choisir le précipité dont il veut étudier la solubilité print precipites[p] #mettre le s à précipité car c'est dans la liste précipités que l'on choisit l'élément

### Donnée pour le calcul de la solubilité # Extraction des données pour le précipité Ks = float(precipites[p][4]) #valeur de Ks, float permet de rendre le nombre utilisable dans les calculs en les rendant “flotants” ka1 = float(precipites[p][5]) #valeur de ka1, Lorsque le précipité n'a pas de ka1, la valeur arbitraire 0 a été mise pour permettre au programme de continuer ka2 = float(precipites[p][6]) #valeur de ka2, Lorsque le précipité n'a pas de ka2, la valeur arbitraire 0 a été mise pour permettre au programme de continuer ka3 = float(precipites[p][7]) #valeur de ka3, Lorsque le précipité n'a pas de ka3, la valeur arbitraire 0 a été mise pour permettre au programme de continuer if ka3 ==0:

  precipites[p].pop() #la valeur 0 pose problème puisque l'on divise par les ka, On la retire donc de la liste

if ka2 ==0:

  precipites[p].pop() #idem

if ka1 ==0:

  precipites[p].pop() #idem

a = float (precipites[p][1]) #nombre de moles de cations libérés en solution b = float (precipites[p][2]) #nombre de moles d'anions libérés en solution

G = float (precipites[p][3]) #Energie libre de Gibbs de formation des composés R = 8.314 #Constante des gaz parfaits Ti = 273.15 + 25 #Converti les degré Celsius en degré Kelvin

#Choix des températures z = 1 #nombre permettant de à la boucle ci dessous de s'appliquer Tlist = [] #initialise une liste avec les différentes températures while z == 1: #boucle de commande

  Tlist.append(float(input ("A quelle température voulez-vous étudiez la solubilité en Celsius? ")+273.15)) #Converti la température en degré Kelvin
  z = input ("Voulez étudiez la solubilité à une autre température ? ==> oui ->1, non ->0  ")  #si l'utilisateur rentre la valeur 1, on recommance la boucle, si 0, le programe continu

### Mise en graphique #Importation des modules supplémentaires import matplotlib as plt from pylab import * import numpy as np

#les données plt.figure() #Directive pour créer la fenêtre, les axes, les échelles, …

serie_pH = [] #initialise une liste vide pour la liste des points des abscisses for pH in range (0,140,1): # va passer successivement des valeurs 0 à 14, la valeur 15 n'est pas comprise dans la liste, besoin d'être des nombres entiers (nombre multiplié par 10)

  serie_pH.append(pH/10.) #ajoute chaque valeur à la liste serie_pH, (divisé par 10 pour obtenir les bonnes valeurs de pH)

for T in Tlist: #pour chaque Température dans la liste Tlist

  Kst = Ks * np.exp((G/R)*((1/T)-(1/Ti)))  #Relation de Van't Hof
  if len(precipites[p]) == 5:  #si la longueur de la liste est de 5, cette formule sera appliquée (anion non-acide)
      Solubilite = [(Kst/((a**a)*(b**b))**(1./(a+b))) for pH in serie_pH] 
  if len(precipites[p]) == 6:         #Si la longueur de la liste est de 6, cette formule est appliquéé (anion monoacide)
      Solubilite = [(Kst/((a**a)*(b**b))*((1+(10**-pH)/ka1)**b))**(1./(a+b)) for pH in serie_pH]
  if len(precipites[p]) == 7:    #si la longueur de la liste est de 7, cette formule est appliquée (anion diacide)
      Solubilite = [(Kst/((a**a)*(b**b))*((1+(10**-pH)/ka1)+((10**-pH)**2)/(ka1*ka2))**b)**(1./(a+b)) for pH in serie_pH]
  if len(precipites[p]) == 8:   # si la longueur de la liste est de 8, cette formule est appliquée (anion triacide)
      Solubilite = [(Kst/((a**a)*(b**b))*((1+(10**-pH)/ka1)+((10**-pH)**2)/(ka1*ka2)+((10**-pH)**3/(ka1*ka2*ka3)))**b)**(1./(a+b)) for pH in serie_pH]

#plot de la ligne

  plt.plot(serie_pH, Solubilite, label= T-273.15) #initialise le graphe en fonction des données,  indication pour la légende, Température exprimée en Celsius 

plt.title(u“Evolution de la solubilite en fonction du pH a temperature donnee”) #directive pour donner un titre au graphique plt.xlabel(“pH”) #directive pour nommer l'axe des abscisses plt.ylabel(“Solubilite”) #directive pour nommer l'axe des ordonnées plt.legend() #directive pour inclure la légende au graphique plt.show() #directive pour afficher la courbe

###Sources : #http://python.physique.free.fr/graphiques.html # Code inspiré des exemples de code du cours </sxh>

Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus
  • teaching/progappchim/solubilite_ph_t.txt
  • Dernière modification : 2016/03/04 15:24
  • de villersd