Python在分析化学实验设计中的应用
Application of Python in the Design of Analytical Chemistry Laboratory
通讯作者:
收稿日期: 2019-10-17 接受日期: 2019-11-11
基金资助: |
|
Received: 2019-10-17 Accepted: 2019-11-11
以磷酸钙的组成测定、铬废液的回收为例,讨论了如何运用Python处理分析化学实验设计中混合离子滴定、与pH相关问题的曲线绘制及其精确求解。运用Python分析,过程更加简洁、直观,能为实验设计提供更好的理论基础。
关键词:
Taking the determination of the composition of calcium phosphate and the recovery of chromium waste liquor as the example, this paper discussed how to use Python to deal with the curve drawing and precise solution of the related problems in the design of analytical chemistry laboratory. Using Python for analysis, the process is more concise and intuitive, which can provide a better theoretical basis for experimental design.
Keywords:
本文引用格式
王浩, 刘红瑜, 韦淼今.
Wang Hao.
在分析化学实验设计中,需对物质选取、用量、溶液pH调节等做定量分析,常用的近似公式、经验判别准则具有一定的局限性;而在精确求解过程中,常会遇到高次方程,往往只能得到部分点值关系。在分析化学中引入其他分析工具,如MATLAB已有较多实例。相较于MATLAB,Python作为一种编程语言,能自行决定更多的算法细节、可以实现更多功能,同时Python开源、免费,有更大的优势。
分析化学中涉及的等量关系常是幂次关系xαyβ,如平衡常数(Ka、Kb、Ksp、K稳)、电荷守恒(CBE)、物料守恒(MBE),几乎不涉及其他复杂函数关系。对于某一特定化学反应体系,借助平衡常数,通过消元可以得到一个二元等量关系,将其转化为单变元函数后或直接利用隐式关系,可通过Python绘制其关系曲线图,从而能更加直观地分析各变量之间关系。
1 基本处理方法
由化学反应体系列出各物质的MBE和体系的CBE (理论上,CBE可由MBE推导而来,但CBE更加清晰直观);利用平衡常数,消元可得所研究的两变量之间的等量关系,将其转化为Python程序语言,便可绘制关系曲线、求值。
图1
沉淀完磷酸根离子后,溶液cBi3+ = 0.01900 mol·L−1,cCa2+ = 0.01000 mol·L−1,pH = 2.0,此时EDTA的酸效应系数为
取20.00 mL待测液,加入60.00 mL蒸馏水,以0.02000 mol·L−1的EDTA滴定。
滴定体系的MBE:
设
将(4)、(5)代入(3)中可得:
将上述等量关系转化为Python程序:
1. import matplotlib.pyplot as plt
2. import numpy as np
3. K1 = 4.9*10**10/(10**13.51) #K1''
4. K2 = 8.71*10**27/(10**13.51) #K2''
5. Vmin = 0 #加入的EDTA体积范围
6. Vmax = 40
7. py = np.linspace(-20, -2, 100000) # py = -lg(y),y or y_为[Y''],作为自变量
8. y_ = []
9. V = []
10. pBi = []
11.
12. for i in py: #计算V, pBi
13. y_.append(10**i)
14. y = y_[-1]
15. V.append((0.2*K1*y/(1+K1*y)+0.38*K2*y/(1+K2*y)+80*y)/(0.02-y)) #即(6)式
16. pBi.append(-np.log10(0.38/(V[-1]+80)/(1+K2*y))) # pBi = -lg(Bi3+),即(5)式
17.
18. def pfind(x, x0): #查找求值
19. for i in range(0, len(x)):
20. if x[i] > = x0:
21. return i
22. print("No result!")
23.
24. print("pBi: ", pBi[pfind(V, 19.00)]) #理论终点
25. print("Et: ", (V[pfind(pBi, 5.40)]/19-1)*100) #以二甲酚橙为指示剂的理论终点误差
26. print("pBiJump: ", pBi[pfind(V, 18.98)], pBi[pfind(V, 19.02)])
27. #滴定突跃:19.00mL(1±0.1%)对应的pBi
28.
29. plt.plot(V, pBi, 'black') #以V为横坐标,pBi为纵坐标,绘制pBi-V关系曲线
30. plt.xlim(Vmin, Vmax)
31. plt.xlabel("$V$/mL")
32. plt.ylabel(“$pBi$”)
33. plt.show()
计算结果:
滴定突跃(即Vsp·(1 ± 0.1%)范围内的pBi):
理论终点(即Vsp = 19.00 mL时的pBi):pBi = 8.42,二甲酚橙理论变色点XO:
二甲酚橙变色点在突跃下端附近,并不是最理想的指示剂,若以二甲酚橙为指示剂的理论终点误差:(Vep和Vsp分别表示理论终点和化学计量点时加入滴定剂的体积)
图2
由滴定曲线图2可知,EDTA滴定混合离子,铋离子有明显突跃,终点误差较小,能准确滴定Bi3+。
由以上分析可知,运用Python分析,只需要将等量关系转化为Python语言(大部分是直接输入公式),并不需要复杂程序结构,所用到的函数较少而且比较固定(利用numpy、matplotlib库);结果直观、便于分析,同时能精确求解滴定突跃、理论变色点、终点误差。而对于传统近似算法,需要考虑公式适用条件,有较多繁杂数学计算;当体系改变时需要重新计算,过程较繁琐。若通过传统方法得到滴定曲线,需要计算不同EDTA体积时的pBi,过程繁杂。上述程序的重复利用性较好:对于EDTA滴定的大部分问题均有效,当体系的参数改变时,如溶液pH、金属离子浓度、金属离子种类、指示剂种类,只需修改部分常数值,重新运行程序即可,而不用从头计算。
2 与pH相关的物质形态问题
在铬废液回收处理实验设计中[3],首先需要考虑Cr(Ⅵ)的还原,下面就还原剂选择及pH的控制做简要分析:
Cr(Ⅵ)在不同pH下的存在形式不同,氧化还原电对不同,主要存在以下平衡:
H2CrO4的电离:Ka1 = 0.18,Ka2 = 3.2 × 10−7
Cr(Ⅵ)各形态浓度:
将(9)、(10)、(11)代入式(8)得:
${\rm{CrO}}_4^{2 - }分布分数:δ({\rm{CrO}}_4^{2 - }) = \frac{{[{\rm{CrO}}_4^{2 - }]}}{{{c_{{\rm{Cr}}}}}} = \frac{1}{{a[{\rm{CrO}}_4^{2 - }] + b}}$
此处与常规酸碱分布分数不同,酸碱电离一般只涉及H+、OH−数目变化,如磷酸各形态都只含1个P,其分布分数与本身浓度无关;由于式(7),Cr(Ⅵ)各形态之间有Cr数目的变化,会出现关于Cr高于一次的等量关系,分布分数与Cr浓度直接相关。
设cCr = 1.000 mol·L−1,由式(12)可求得[
再由式(9)、(10)、(11)可求得
绘制各物质分布分数与pH的关系曲线如图3所示(程序见补充材料1.1):
图3
图3清晰地展示了不同pH下Cr(Ⅵ)的存在形式(此处pH = 1.0–6.0时,Cr(Ⅵ)的主要存在形式不止一种),再根据不同形态下氧化还原电对的电极电势便可判断与各种还原剂反应的能力以及最适pH范围,从而为还原剂选择提供指导。
由以上分析可发现,利用平衡常数和体系MBE可以得到各物质形态分布分数与[H+]的关系,通过Python绘制其关系曲线,从而对各物质形态的分布有更加直观的了解,为后续分析提供指导。在传统方法中,难以对全貌有很清晰的刻画,若要得到分布分数与pH的关系曲线,需要进行大量的单点计算,过程十分繁琐。
前文指出:由式(7)的特殊性,Cr(Ⅵ)分布分数与Cr浓度直接相关,记Cr浓度为c (0.1000–6.000 mol·L−1),
由式(12):
再由式(9)、(10)、(11)可求得
绘制Cr(Ⅵ)分布分数与pH、c关系曲面如图4所示(程序见补充材料1.2)。
图4
图5
从图5中可以看出,当pH = 7.0时,
$2\mathrm{H}\mathrm{C}\mathrm{r}{\mathrm{O}}_{4}^{-}\rightleftharpoons \left(2{\mathrm{H}}^{+}+2\mathrm{C}\mathrm{r}{\mathrm{O}}_{4}^{2-}\right)\rightleftharpoons {\mathrm{C}\mathrm{r}}_{2}{\mathrm{O}}_{7}^{2-}+{\mathrm{H}}_{2}\mathrm{O}$
$K = \frac{{[{\rm{C}}{{\rm{r}}_2}{\rm{O}}_7^{2 - }]}}{{{{{\rm{[HCrO}}_4^ - ]}^2}}} = {K_{{\rm{a2}}}}{K_{\rm{3}}} = 50.15$
利用Python将变量之间的关系可视化,结果清晰直观,可以从全局把握变量间的关系,不局限于一点、一线,这是传统分析方法难以企及的。
3 结语
相对于传统方法而言,利用Python分析不需要记忆大量的近似公式及其适用条件,只需要对不同体系的基本原理有所了解,通过MBE、CBE、平衡常数建立等量关系,再将其转化为研究变量间的函数关系,便可通过Python求解和绘制相关曲线。利用Python分析相关问题能有效减少繁杂计算,同时能对问题有更加深入、全面的认识,结果更加清晰直观,从而为分析化学实验设计提供更好的决策依据。
补充材料:可通过链接http://www.dxhx.pku.edu.cn免费下载。
参考文献
/
〈 |
|
〉 |
