no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | teaching:progappchim:courbe_predominance_acide_2013 [2013/11/28 14:18] (Version actuelle) – créée villersd | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Courbe de Prédominance d'un Acide ====== | ||
+ | <sxh python; title : courbe_predominance_acide.py> | ||
+ | # | ||
+ | # -*- coding: utf-8 -*- | ||
+ | # travail de KH, ba2 chimie 2012-2013 | ||
+ | |||
+ | # Courbe de Prédominance d'un Acide # | ||
+ | from math import * | ||
+ | import matplotlib.pyplot as plt | ||
+ | from Tkinter import * | ||
+ | |||
+ | def equations (n, | ||
+ | | ||
+ | pH = 0. #pH de départ | ||
+ | if n==3: | ||
+ | Ka1=10**(-pKa1) | ||
+ | Ka2=10**(-pKa2) | ||
+ | Ka3=10**(-pKa3) | ||
+ | |||
+ | while pH < 14: #pH va jusque 14 | ||
+ | |||
+ | H = 10**(-pH) #équation pour avoir les concentrations en H30+ aux différents pH demandé | ||
+ | O = (10**(-14)) / H #équation pour avoir les concentrations en OH- aux différents pH demandé | ||
+ | K = 1 + H/Ka3 + (H**2)/ | ||
+ | a0= 1/K # équation pour avoir alpha0 | ||
+ | a1=a0*(H/ | ||
+ | a2=a1*(H/ | ||
+ | a3=a2*(H/ | ||
+ | H3Y = a3 * C # équation pour avoir la [H3Y] | ||
+ | H2Y = a2 * C # équation pour avoir la [H2Y-] | ||
+ | HY2 = a1 * C # équation pour avoir la [HY2-] | ||
+ | Y3 = a0 * C # équation pour avoir la [Y3-] | ||
+ | |||
+ | # listes auxquels nous ajouterons les différentes valeurs calculées au dessus pour chaque pH demandé : | ||
+ | |||
+ | a.append(pH) | ||
+ | b.append (H) | ||
+ | c.append (O) | ||
+ | d.append (H3Y) | ||
+ | e.append (H2Y) | ||
+ | f.append (H2Y) | ||
+ | g.append (Y3) | ||
+ | pH = pH + 0.1 | ||
+ | |||
+ | elif n==2: | ||
+ | Ka1=10**(-pKa1) | ||
+ | Ka2=10**(-pKa2) | ||
+ | |||
+ | while pH < 14: | ||
+ | H = 10**(-pH) | ||
+ | O = (10**(-14)) / H # équation pour avoir les concentration en OH - aux différents pH demandé | ||
+ | K = 1 + H/Ka2 + (H**2)/ | ||
+ | a0 = 1/K #équation pour avoir alpha 0 | ||
+ | a1= a0*(H/ | ||
+ | a2 = a1*(H/ | ||
+ | H2Y = a2*C # | ||
+ | HY=a1*C | ||
+ | Y2=a0*C | ||
+ | |||
+ | # listes auxquels nous ajouterons les différentes valeurs calculées au dessus pour chaque pH demandé : | ||
+ | |||
+ | a.append(pH) | ||
+ | b.append(H) | ||
+ | c.append(O) | ||
+ | d.append(H2Y) | ||
+ | e.append(HY) | ||
+ | f.append(Y2) | ||
+ | pH = pH + 0.1 | ||
+ | elif n==1: | ||
+ | | ||
+ | Ka1=10**(-pKa1) | ||
+ | while pH < 14 : | ||
+ | H = 10**(-pH) | ||
+ | O = (10**(-14)) / H # équation pour avoir les concentration en OH - aux différents pH demandé | ||
+ | K = 1 + H/Ka1 #équation pour avoir la valeur de alpha H | ||
+ | a0 = 1/K #équation pour avoir alpha 0 | ||
+ | a1= a0*(H/ | ||
+ | HY= a1*C #équation pour avoir la [HY] | ||
+ | Y=a0*C | ||
+ | |||
+ | # listes auxquels nous ajouterons les différentes valeurs calculées au dessus pour chaque pH demandé : | ||
+ | |||
+ | a.append(pH) | ||
+ | b.append (H) | ||
+ | c.append (O) | ||
+ | d.append (HY) | ||
+ | e.append (Y) | ||
+ | pH = pH + 0.1 | ||
+ | |||
+ | #2eme fenêtre dans laquelle on rentrera les paramètres propre à la molécule étudiée. | ||
+ | def fenetre2(): | ||
+ | |||
+ | root2 = Tk() | ||
+ | | ||
+ | | ||
+ | n = float (champn.get ()) # transformation en nombre flottant de la valeur entrée pour n | ||
+ | |||
+ | txtn = Label(root2, | ||
+ | txtn.grid(row=2) | ||
+ | champ1 = Entry(root2) #demander le pKa1 | ||
+ | champ1.grid(row=3) | ||
+ | | ||
+ | if n > 1 : # | ||
+ | |||
+ | txt2 = Label(root2, | ||
+ | txt2.grid(row=4) | ||
+ | champ2 = Entry (root2) #demande le pKa2 | ||
+ | champ2.grid(row=5) | ||
+ | | ||
+ | if n == 3 : # | ||
+ | txt3 = Label(root2, | ||
+ | txt3.grid(row=6) | ||
+ | champ3 = Entry (root2) #demande le pKa3 | ||
+ | champ3.grid(row=7) | ||
+ | |||
+ | def graphe(): | ||
+ | | ||
+ | a=[] | ||
+ | b=[] | ||
+ | c=[] | ||
+ | d=[] | ||
+ | e=[] | ||
+ | f=[] | ||
+ | g=[] | ||
+ | n = float(champn.get()) | ||
+ | C = float(champc.get()) | ||
+ | pKa1 = float(champ1.get()) | ||
+ | pKa2 = 0 | ||
+ | pKa3 = 0 | ||
+ | if n > 1: | ||
+ | pKa2 = float (champ2.get()) | ||
+ | if n == 3: | ||
+ | pKa3 = float (champ3.get()) | ||
+ | | ||
+ | equations(n, | ||
+ | | ||
+ | plt.xlabel(" | ||
+ | plt.ylabel(" | ||
+ | |||
+ | # les différentes droites qui seront présentes sur le graphique semilog : | ||
+ | | ||
+ | c1 = plt.semilogy(a, | ||
+ | c2 = plt.semilogy(a, | ||
+ | c3 = plt.semilogy(a, | ||
+ | c4 = plt.semilogy(a, | ||
+ | if len(f)> | ||
+ | c5 = plt.semilogy(a, | ||
+ | if len(g)> | ||
+ | c6 = plt.semilogy(a, | ||
+ | | ||
+ | plt.title(" | ||
+ | plt.show() | ||
+ | | ||
+ | b2=Button(root2, | ||
+ | b2.grid(row=8) | ||
+ | |||
+ | bfin=Button(root2, | ||
+ | bfin.grid(row=9) | ||
+ | |||
+ | root2.mainloop() | ||
+ | |||
+ | # éliminer la fenêtre : | ||
+ | root2.destroy() | ||
+ | |||
+ | #fenêtre n°1 dans laquelle on donnera le nombre de proton de la molécule afin de pouvoir donner les valeurs nécessaires à ceux-ci. | ||
+ | root1= Tk() | ||
+ | |||
+ | txtn = Label(root1, | ||
+ | txtn.grid(row=0) | ||
+ | champn=Entry(root1) | ||
+ | champn.grid(row=1) | ||
+ | |||
+ | |||
+ | txtc = Label(root1, | ||
+ | txtc.grid(row=2) | ||
+ | champc = Entry(root1) #demande la concentration de la molécule. | ||
+ | champc.grid(row=3) | ||
+ | |||
+ | b1 = Button(root1, | ||
+ | |||
+ | b1.grid(row = 4) | ||
+ | |||
+ | b2 = Button(root1, | ||
+ | b2.grid (row = 5) | ||
+ | root1.mainloop() | ||
+ | |||
+ | # éliminer la fenêtre : | ||
+ | root1.destroy() | ||
+ | |||
+ | # | ||
+ | |||
+ | # http:// | ||
+ | # http:// | ||
+ | # https:// | ||
+ | # http:// | ||
+ | |||
+ | </ |