基于Octave氢氟酸水溶液组成计算的研究
2023-09-27李永涛董灿生张雨嫣
李永涛,董灿生,张雨嫣,陆 桦,李 赛
(云南氟磷电子科技有限公司,云南 昆明 650309)
配制含氢氟酸或氟离子水溶液时,由于氢氟酸是一种弱酸且溶液中存在多种平衡[1],氟离子、氢离子等组分浓度不像强酸那样简单计算出来。当溶液中存在两个以下平衡方程时,可以通过近似方法简化方程,从而获得方程的解析解。例如,在一元弱酸或二元弱酸溶液中,计算氢离子的浓度。但平衡方程超过3个时,解析解无法得到,数值解只能通过编程计算的方式得到[2]。
在涉及氢氟酸或氟盐水溶液时,由于存在3个平衡方程、水的解离方程、氟守恒方程、电荷守恒等6个方程,构成了非线性方程组。要获得该方程组的数值解,需要借助计算机编程求解。Octave软件[3]的fsolve函数恰好可以对非线性方程组进行求解,简化了复杂的算法设计过程,从而可以快速获得氢氟酸或氟盐水溶液中各组分的平衡浓度。
在求解氢氟酸水溶液体系组分平衡浓度时,Brahim[4]采用NRTL模型进行求解,得出采用3个平衡时,模型的解与实验结果吻合较好。Kolasinski采用Mathematica软件对氢氟酸水溶液中各组分浓度进行了求解[5]。Baeza等人采用Octave求解化学平衡问题[6-7],还提出了计算多平衡中化学组分浓度的系统方法[8]。Paz-Carcia等人采用基于反应程度的算法计算多物种化学平衡[9]。Glaser等人采用动态方法解决了酸及其共轭碱混合物多平衡问题[10]。
1 溶液平衡方程组的建立
氢氟酸在水中发生解离反应,生成氢离子和氟离子,反应如下:
(1)
式中ax表示活度,Ka=6.84×10-4为解离常数(25 ℃ 时)。氢氟酸水溶液的活度系数见文献[11-12]。
氢氟酸与氟离子发生缔合反应,生成氟氢酸根离子,反应如下:
(2)
式中bx表示质量摩尔浓度mol/kg,K1=5.0。
此外,氢氟酸能与氟氢酸根离子进一步发生缔合反应,反应如下:
(3)
式中K2=0.58。氢氟酸水溶液中存在的3个平衡常数数值在文献[13-15]中报道。
在水溶液中存在水的自解离平衡[15],即
Kw=[H+][OH-]=1.008×10-14(25 ℃)
(4)
(5)
溶液中的电荷守恒可以表示为:
(6)
以上方程(1)~(6)含有6个方程,6个未知数,可以通过Octave进行求解。
1.1 Octave求解过程
1.1.1 求解方法一
1)设置初始猜测值。初始猜测值X0为一列向量。
2)调用fsolve函数。调用格式为[X,fval,info]=fsolve(fcn,X0)。fcn为需要求方程组的函数句柄,或函数名称。输出X为方程组的数值解,而第二个输出fval为取值为X时,方程的值,为全零向量。第三个输出info表示报告算法是否成功,info值为1表示方程组的解已经收敛。
4)设定形式浓度的值,运行程序得到该形式浓度下,溶液的平衡浓度X。列向量X中的数值,与(i)中列出的未知数顺序一致。
1.1.2 求解方法一程序代码
1)设置主函数并列出初始猜测值
function[X]=composition
%初始猜测值
HF0=1e-5;
Hx0=1e-5;
F0=1e-5;
HF20=1e-5;
H2F30=1e-5;
%将初始猜测值写为列向量X0
X0=[HF0;Hx0;F0;HF20;H2F30];
2)调用方程组函数fsolvefunction
fhandle=@fsolvefunction;
[X,fval,info]=fsolve(fhandle,X0);
X=abs(X);
3)编写方程组函数
%将未知变量X赋值给方程变量
HF=abs(X(1));
Hx=abs(X(2));
F=abs(X(3));
HF2=abs(X(4));
H2F3=abs(X(5));
%定义形式浓度mol/kg
a0=0.1;%氢氟酸(HF)形式浓度
b0=0;%氢离子(H+)形式浓度
c0=0;%氟离子(F-)形式浓度
%列出平衡常数
Ka=6.84e-4;
K1=5.0;
K2=0.58;
%列出方程组
eq1=HF+F+2*HF2+3*H2F3-a0-c0-2*d0;
eq2=F+HF2+H2F3+b0-Hx-c0-d0;
eq3=Hx*F/HF-Ka;
eq4=HF2/(HF*F)-K1;
eq5=H2F3/(HF*HF2)-K2;
%将方程组写为列向量F。
F=[eq1;eq2;eq3;eq4;eq5];
1.1.3 求解方法二
参考文献[7]的方法,方程(1),(2)和(3)取负常用对数,然后将用到的五个方程进行归一化,再求解。
1.1.4 求解方法二代码
function[X]=composition2
%初始猜测值
pHF0=1;
pHx0=2;
pF0=2;
pHF20=1;
pH2F30=2;
X0=[pHF0;pHx0;pF0;pHF20;pH2F30];
%调用方程组函数
fhandle=@fsolvefunction;
[X,fval,exitflag]=fsolve(fhandle,X0);
X=10.^-X;
function F=fsolvefunction(X)
%将未知变量X赋值给方程变量
pHF=X(1);
pHx=X(2);
pF=X(3);
pHF2=X(4);
pH2F3=X(5);
HF=10^-X(1);
Hx=10^-X(2);
F=10^-X(3);
HF2=10^-X(4);
H2F3=10^-X(5);
%定义形式浓度mol/kg
a0=0.1;%氢氟酸(HF)形式浓度
b0=0;%氢离子(H+)形式浓度
c0=0;%氟离子(F-)形式浓度
%列出平衡常数
pKa=-log10(6.84e-4);
pK1=-log10(5.0);
pK2=-log10(0.58);
%列出方程组
eq1=1-(HF+F+2*HF2+3*H2F3)/(a0+c0+2*d0);
eq2=1-(F+HF2+H2F3+b0)/(Hx+c0+d0);
eq3=1-(pHx+pF-pHF)/pKa;
eq4=1-(pHF2-pHF-pF)/pK1;
eq5=1-(pH2F3-pHF-pHF2)/pK2;
%将方程组写为列向量F。
F=[eq1;eq2;eq3;eq4;eq5];
1.1.5 运行测试
将上述代码分别保存为 composition.m,composition2.m文件,放在Octave的运行路径下。在Octave程序命令窗口输入X=composition或X2=composition2,即可求解出X或X2的数值。经验证,两种方法获得的解完全一致。
2 模型验证
将运行上述代码的结果与文献[16]的实验数据进行对比,结果如图(1),图(2)和图(3)所示。从图中(实线)可看出,模拟结果对氢氟酸和氢离子的平衡浓度结果较好,对氟离子平衡浓度有约20%的负偏差。出现偏差的原因是,方程式(1)没有采用活度系数进行计算。采用活度系数校正计算结果与实验结果吻合均较好(图中虚线)。
图1 氢氟酸活度模拟值与实验值对比
图2 氢离子活度模拟值与实验值对比
图3 氟离子活度模拟值与实验值对比
3 应用举例
3.1 氢氟酸稀溶液中各组分平衡浓度
模拟氢氟酸形式浓度从0.1~2 mol/kg 变化时,溶液中各组分平衡浓度(活度)的分布。将程序中形式浓度部分取a0的值从0.1到2(每次取一个值进行计算),b0,c0,d0值为零,保持不变。计算出不同氢氟酸形式浓度下各组分多组平衡浓度数值,并绘图可得如图(4)所示各组分浓度随氢氟酸形式浓度变化曲线图。
从图(4)可看出氢氟酸的平衡浓度要小于形式浓度,溶液中存在较多的氢氟酸。随着氢氟酸形式浓度的增加,氟离子平衡浓度先增加后减少,而氟氢酸根离子浓度非线性地升高。
图4 氢氟酸稀溶液中各组分平衡浓度随氢氟酸形式浓度的分布
3.2 氢氟酸盐酸溶液中各组分平衡浓度
模拟含有 0.1 moL/kg 盐酸,氢氟酸形式浓度从0.1~2 moL/kg 变化时,溶液中各组分平衡浓度(活度)的分布。将程序中的形式浓度部分取a0的值从0.1到2(每次取一个值进行计算),b0=0.1,c0,d0值为零,保持不变。计算出不同氢氟酸形式浓度下各组分平衡浓度的多组数值,并绘图可得如图(5)所示的各组分浓度随氢氟酸形式浓度的变化曲线图。
图5 氢氟酸-盐酸溶液中各组分平衡浓度随氢氟酸形式浓度的分布
从图(5)可看出,氢离子平衡浓度从 0.1 moL/kg 的基础上增加到 0.2 moL/kg,这是由于溶液中含有 0.1 moL/kg的盐酸。氟离子浓度逐渐增加,但浓度比没有盐酸时要小。氟氢酸根离子浓度非线性地增加。
3.3 氢氟酸氟化钠溶液中各组分平衡浓度
模拟氟化钠浓度 0.5 moL/kg,氢氟酸形式浓度从0.1~2 moL/kg 变化时,溶液中各组分平衡浓度(活度)的分布。将程序中的形式浓度部分取a0的值从0.1到2(每次取一个值进行计算),b0=0,c0=0.5,d0值为零,保持不变。计算出不同氢氟酸形式浓度下各组分平衡浓度多组数值,并绘图可得如图(6)所示的各组分浓度随氢氟酸形式浓度变化曲线图。
图6 氢氟酸-氟化钠溶液中各组分平衡浓度随氢氟酸形式浓度的分布
从图(6)可看出,氢离子平衡浓度从0增加到 0.02 moL/kg,这是由于溶液中开始时氢氟酸浓度较小,解离出的氢离子与溶液中的氟离子反应。氟离子浓度逐渐减少,除了参与氢离子的反应,还与氢氟酸反应生成氟氢酸根离子。氟氢酸根离子浓度非线性地先增加后减少。
3.4 氟氢化钾溶液中各组分平衡浓度
模拟氟氢化钾形式浓度从0.1~2 moL/kg 变化时,溶液中各组分平衡浓度(活度)的分布。将程序中的形式浓度部分取d0的值从0.1到2(每次取一个值进行计算),a0,b0,c0值为零,保持不变。计算出不同氟氢化钾形式浓度下各组分浓度多组数值,并绘图可得如图(7)所示的各组分浓度随氟氢化钾形式浓度变化曲线图。
图7 氟氢化钾溶液中各组分平衡浓度随氢氟酸形式浓度的分布
从图(7)可看出,氢氟酸的平衡浓度从0.05增加到 0.35 moL/kg,这是由于溶液中氟氢酸根离子分解产生氟离子和氢氟酸。氟离子浓度逐渐增加,除了参与氢离子的反应,还与氢氟酸反应生成氟氢酸根离子。氟氢酸根离子浓度几乎线性地增加。
3.5 氟化钠盐酸溶液中各组分平衡浓度
模拟盐酸形式浓度从0.1~2 moL/kg 变化时,1 moL/kg 氟化钠溶液中各组分平衡浓度(活度)的分布。将程序中的形式浓度部分取b0的值从0.1到2(每次取一个值进行计算),a0=0,c0=1,d0=0,保持不变。计算出不同盐酸形式浓度下各组分浓度多组数值,并绘图可得如图(8)所示的各组分浓度随盐酸形式浓度变化曲线图。
图8 氟化钠溶液中各组分平衡浓度随盐酸形式浓度的分布
从图(8)可看出,氢氟酸平衡浓度从0增加到 1 mol/kg,这是由于盐酸的加入,氢离子与氟离子反应生成氢氟酸。氟离子浓度逐渐减少,除了参与氢离子的反应,还与氢氟酸反应生成氟氢酸根离子。氟氢酸根离子浓度先增加后减少。盐酸形式浓度 0.5 moL/kg 时,氟氢酸根离子浓度最大,约为 0.24 mol/kg。
4 结语
利用Octave开源软件的fsolve函数,解决了氢氟酸溶液体系中各组分平衡浓度计算问题。讨论了五种不同情形下,氢氟酸或氟化盐水溶液中各组分平衡浓度的计算方法及模拟结果,可直观了解各组分平衡浓度随形式浓度的变化情况。