开发面向分析化学的复杂方程绘图求解软件
Developing a Software Package to Plot and Solve Complex Equations in Chemical Analysis
通讯作者:
基金资助: |
|
Fund supported: |
安徽省重大教学研究项目. |
化学平衡的精确解析会涉及复杂方程的求解,而分析化学专业人员通常不完全具备相关算法和编程知识。所以,尽管当前硬件发达、编程语言丰富,精确解析仍然难以在分析化学课程中大规模推广。为此,基于Matlab语言,开发了具有针对性的方程求解软件。该软件以简洁的界面、直观的图像和自然的人机交互,实现方程的高效求解;对用户的编程要求非常低。期望通过这种方式,显著降低化学平衡精确解析中的软件使用成本,从而为大规模推广提供进一步的支持。本文介绍了该软件的基本原理和主要特点;通过3个复杂化学平衡实例,详细说明软件的使用方法以及注意事项。另外提供Android系统版本,免费使用。
关键词:
Accurate analysis of chemical equilibria involves solving complex equations, which requires adequate knowledge on algorithms and programming languages. People who major in analytical chemistry often lack such knowledge. As a result, it is difficult to adopt accurate analysis in analytical chemistry on a large scale. To overcome such difficulty, we developed a software package with Matlab. The software solves complex equations efficiently through an intuitive interface, a graph, and natural interactions, whilst requires little programming on users. This paper introduced theory and features of the software package, and explained its usage in detail with 3 examples of complex chemical equilibria. An Android version was also developed and provided free of charge.
Keywords:
本文引用格式
邵利民.
SHAO Li-Min.
近似求解是特定历史条件下的权宜之计。当计算机技术高度发展、数值运算不再困难时,人们自然转向精确解析。“去公式化”课程体系为化学平衡的精确解析提供了理论框架[4];技术层面上的实施也不困难。然而,在分析化学课程中大规模推广精确解析,还需要硬件和软件的进一步支持。
当前,计算机硬件不仅具有强大的运算能力,更重要的是高度普及和便携,如笔记本电脑、平板电脑和智能手机,从而为精确解析的大规模推广提供了足够支持。软件,尤其是高效易用的软件,发展相对滞后,是大规模推广的瓶颈。
精确解析的大规模推广需要这样一种方程求解软件:功能足够强大,又如计算器般直观易用。看似矛盾,然而,当前硬件和软件发展水平已经允许我们设计出界面友好,直观易用的软件。这也是开发本软件的主导思想:为分析化学师生提供直观、高效、免费的方程求解软件,尽可能降低化学平衡精确解析中的软件使用成本。
1 软件设计要点
本软件在Matlab环境下开发和使用。Matlab是Mathworks公司出品的数据分析和数值计算的专业平台,兼有编程语言和应用软件的特点。作为编程语言,Matlab语法简单高效;作为应用软件,Matlab提供各种专业的算法程序。对于非计算机专业人员,Matlab是解决数值计算问题的有力工具。另外,越来越多的国内高校为非计算机专业学生开设Matlab课程;有些高校购买“正版全校授权” (Total Academic Headcount,TAH),供在校师生免费使用。这些措施进一步提高了Matlab在高校的普及程度。
本软件采用“二分法”求解方程。其他方程求根算法包括不动点迭代法(Picard迭代)、切线法(Newton-Raphson迭代)、割线迭代法等。与各种迭代法相比,二分法无须建立迭代公式,不必考虑迭代初值,也不必考虑迭代收敛问题,所以在易用性方面具有显著优势,对于非计算机专业用户来说尤其如此。二分法要求函数在求根区间上连续,且与x轴只有一个交点,这通过函数图像很容易判断。
本软件绘制方程对应的函数的图像,直观反映函数与x轴的相交情况。通过图像缩放或者平移,用户能够快速确定满足二分法要求的求根区间,既提高效率,又避免漏根。此外,图像便于用户查看函数特征和细节,进而判断是否存在因绘图数据点不足而未能显示的交点,文中例3介绍了这种情况。
本软件的开发重点是界面。对于非专业人员而言,界面体验直接决定了求解效率。根据人们求解方程的自然思路,规划界面布局;遵循求解过程的内在逻辑,设置软件功能以及各功能之间的逻辑关系。界面设计完全服务于功能,在满足功能性的同时,尽量简洁,所有功能均在界面上提供,没有设置菜单。
本软件从底层设计,仅使用Matlab基本运行环境,不需要任何工具箱(Toolbox)中的函数。用户不必为此另外购买任何Matlab工具箱。
2 软件安装和首次运行
用户从http://staff.ustc.edu.cn/~lshao/misc.html下载iroots2安装程序。软件尽管可以安装在任意文件夹,但是其文件操作权限可能受限(如果权限不够,软件给出提示和解决方法)。为了避免权限方面的麻烦,建议将安装程序下载到桌面,然后默认安装。
上述文件操作权限是指软件iroots2求解方程时在自身文件夹中创建和删除数据文件,不会对其他文件进行操作。
iroots2要求Matlab的最低版本是7.10.0.499 (R2010a)。如果Matlab版本太低,软件给出相应提示。
软件安装成功后,需要在Matlab中输入相应命令来运行,运行方法在软件文件夹中的The First Running.pdf有详细介绍。这种略显繁琐的手动运行方式仅需一次。首次运行时,iroots2在用户许可后,会自动创建一个快捷方式,以后通过点击快捷方式按钮,即可方便地运行该软件。
3 软件使用
软件的主界面如图1所示。上面的工具栏包含5个按钮,分别是“放大”“缩小”“平移”“帮助”和“检查更新”;前3个按钮用于函数图像的操作。主界面划分为Function和Action两个功能区,分别用于输入方程表达式,绘制对应函数图像并求解方程。
图1
3.1 输入方程
在Function功能区,用户按照Matlab语法输入待解方程的表达式。为了简要说明语法规则,软件启动后即显示一个实例,见图1中的蓝色文本。用户点击“Syntax”按钮,可以查看另外一个复杂实例,是CaF2在0.010 mol∙L-1盐酸溶液中溶解平衡时关于[H+]的高次方程。
软件自带两个实例,是为了方便不熟悉Matlab语法的用户。事实上,Matlab语法接近自然语言,而化学平衡中的方程相对简单,所以方程输入所涉及的Matlab语法容易掌握,概况为以下要点:
1)变量区分大小写。
2)字母x和y是指定的自变量和因变量,不能他用。
3)以%开始的行是注释。建议进行必要的注释,以备参考,因为所有用户输入的方程都被自动保存在一个数据库中。
4)如果方程表达式比较复杂,可以使用一些临时变量,参见“Syntax”按钮提供的实例。
5)每条语句应该以分号结束(用户如果忽略,软件会智能添加)。
6)运算符+、-、*、/、^分别代表加、减、乘、除、和乘方。对于开n次方,可以使用^(1/n)。负数开奇数次方Matlab给出复数结果,如(-8)^(1/3) = 1.0000 + 1.7321i,为了避免这一点,建议使用nthroot,如nthroot(-8, 3) = -2。
(7)如果表达式较长,输入时会自动折行。用户也可以自己断行,断行处添加省略号…。
方程输入完成后,用户需要点击“Finish”按钮,进行下一步。“Clear”按钮清除所有输入。“Function DB”按钮进入方程库,在3.3节详细介绍。
3.2 图像绘制和方程求解
函数图像的绘制和方程求解在Action功能区完成。如图1所示,功能区下方是显示函数图像的坐标系。功能区上方是按钮、文本和编辑框等控件,这些控件组成一句完整表述:Plot the function from 1e-14 to 1, or around 0.0, with 10000 points, solve it。期望以这种扁平化方式既解释方程求解的过程,又完成相应功能,同时保持界面的简洁清晰。
区间端点的缺省值为10-14和1,是为了方便化学平衡中组分浓度的求解,因为浓度通常处于这个区间。区间端点的具体数值并不重要,只需满足“函数在区间内与x轴只有一个交点”的要求即可。用户如果知道方程的近似解,还可以选择在这个近似解附近绘图,软件会自动搜索一个满足要求的求根区间。当区间端点的数量级相差太大时,软件自动选择对数坐标。
用户单击“Plot the function”按钮来绘制函数图像。如果坐标系背景为绿色,说明函数与x轴只有一个交点——满足“二分法”要求,然后单击“solve it”按钮,即显示求根结果,结果同时也复制到剪贴板。如果坐标系背景为红色,表明“二分法”的求根条件不满足(没有交点或者有多个交点),“solve it”按钮为不可点击状态。如果存在多个交点,通过工具栏上的按钮对图像进行缩放或者平移,改变横坐标的范围,直到坐标系重新变为绿色(“solve it”按钮同时变为可点击状态),然后进行求解。通过这种方式,可以求出所有交点。
3.3 方程库
图2
用户如果想再次求解数据库中的某个方程,定位到该方程后单击“Choose”。软件将返回方程求解界面,并自动完成方程的输入(“Finish”按钮处于不可点击状态),用户直接在Action功能区实施求解。
单击按钮“Delete”或者“Purge”,可以删除当前方程或者数据库中所有方程。按钮“Undo”用于撤销“Purge”或者一次“Delete”操作。如果用户删除了多个方程,那么按钮“Undo”无法复原数据库,此时单击窗口右上角的X退出软件(而不是“Close”按钮退出数据库),那么原数据库不受影响。
数据库以二进制格式保存。可以通过按钮“Export”将数据库中方程导出到一个文本文件。
3.4 软件其他功能
软件提供一定的界面定制:用户可以修改窗口大小,文本和按钮的字体大小。这样,在不同屏幕分辨率下,特别是高分屏,也能获得较好的界面体验。
界面定制与Matlab版本相关。一台计算机上如果安装了多个版本的Matlab,可以在不同版本下对软件界面进行分别定制,互不干扰。不同版本Matlab对图形窗口的设置以及字体渲染有时略有差异,而针对Matlab版本的界面定制可以克服这种差异对于界面体验的影响。
软件提供新版本查询功能。用户点击工具栏上的“U”按钮,可以手动查询新版本;软件会定期自动查询新版本(不会上传任何用户信息)。如果有新版本,在得到用户允许后,软件会自动完成更新,用户数据(界面定制和方程库)不受影响。
3.5 进一步说明
在方程输入面板,用户通过右键菜单或者常规快捷键进行文本的复制、粘贴、剪切和全选。但是,面板不支持撤销操作以及相应快捷键ctrl+z,这是Matlab的限制。
本软件有意降低对用户Matlab编程知识的要求,以突出易用性,代价是无法利用Matlab在矩阵运算方面的优势。
限于条件,本软件没有在Mac系统和Linux系统下进行检测,尤其是文件创建、删除等操作。
针对具有一定Matlab编程知识的用户,还开发了另一个功能基本相同的求解软件,名为iroots,这也是文献[4]附录4中的版本,下载地址是http://staff.ustc.edu.cn/~lshao/misc.html。iroots的易用性不如iroots2,但是更加灵活,并且不依赖于操作系统和屏幕分辨率。
软件保留版权。对于非商业用户,软件免费使用,免费升级。iroots同样是免费软件,并且提供源代码。
还开发了Android版本,用户可以在“小米应用商店”通过搜索equation solver安装使用,也可以从上述地址下载apk文件。
4 软件应用
分析化学中的方程一般不太复杂,而且多是求解浓度,例如常见的求pH问题。所以,只要方程输入正确,使用软件默认的求根区间[10-14, 1],通常可以顺利求解,而且只需两步:单击“Plot the function”绘图,图像背景绿色时单击“solve it”。
如果涉及多个化学平衡,方程求解可能存在某些困难,包括:①方程比较复杂,有时甚至难以得到y = f(x)这样的显式方程,因此输入繁琐、易错;②难以确定求根区间;③存在多个解。对于第1个困难,输入表达式时适当使用辅助变量。对于第2和第3个困难,要充分利用图像,并结合具体问题中的信息,综合判断。下面通过3个例题进行说明,例题全部选自文献[4],解题过程突出软件的使用,省略方程推导。
例1 0.050 mol∙L-1的I2溶液作为滴定剂(含1.0 mol∙L-1 KI),滴定0.10 mol∙L-1的Na2S2O3溶液。以淀粉为指示剂,当溶液中I3-的浓度为5.0 ×10-6 mol∙L-1时,溶液由无色变为蓝色,计算终点误差。(电对I3-/I-和S4O62-/S2O32-的条件电势
解:解题关键在于R,R = Vep/Vsp,其中Vep和Vsp分别表示滴定终点和化学计量点时加入I3-溶液的体积。通过推导,得到以下方程:
方程形式复杂,编程时将其中的某些项表示为辅助变量,这样可以使表达式简洁可靠。下面是参考代码,在Function功能区输入后单击“Finish”按钮。
const = 10 ^ (2 * (0.08 -0.545)/0.059 + 6);
aux1 = 5 * (x + 1)^2 * (0.10001 -0.09999 * x)^2;
aux2 = (1.09999 * x -1e-5)^3;
aux3 = (0.049995 * x -5e-6);
y = const * aux2 * aux3 -aux1;
图3
例2 将CdS置于cNaCN = 0.10 mol∙L-1的碱性溶液中,沉淀溶解平衡后pH = 10.0。需要考虑沉淀溶解对溶液原有[CN-]的影响,计算CdS的溶解度。(CdS:Ksp = 1.0×10-27;H2S:Ka1 = 1.3×10-7,Ka2 = 7.1×10-15;HCN:Ka = 6.2×10-10;Cd2+-CN-配离子:β1 = 3.0×105,β2 = 4.0×1010,β3 = 1.7× 1015,β4 = 6.0×1018)
解:解题关键在于[CN-]。通过推导,得到以下方程,其中x表示[CN-]。
类似于例1,输入方程表达式时使用辅助变量。下面是参考代码,在Function功能区输入后单击“Finish”按钮。
k1 = 1.3e-7; k2 = 7.1e-15; k = 6.2e-10; h = 1e-10; ksp = 1e-27;
b1 = 3e5; b2 = 4e10; b3 = 1.7e15; b4 = 6e18;
aux1 = 1 + b1 * x + b2 * x^2 + b3 * x^3 + b4 * x^4;
aux2 = b1 * x + 2 * b2 * x^2 + 3 * b3 * x^3 + 4 * b4 * x^4;
aux3 = k1 * k2 / (h^2 + k1 * h + k1 * k2);
aux4 = k / (h + k);
y = ksp * aux2 / (0.1 -x / aux4) / aux3 -(0.1 -x / aux4) * aux1 / aux2;
Cd2+-CN-配合物的生成致使[CN-] < 0.10;但是CdS非常难溶,释放出的Cd2+很少,故[CN-]也不会太小。这样,未知数[CN-]很有可能处于软件默认的求根区间10-14 -1之中,于是直接点击“Plot the function”进行绘图。
图4
方程中的项0.10 -x/δCN-应该大于零,将相应数值代入,得到x < 0.08611。所以,符合题意的根是8.5877×10-2 mol∙L-1。
值得指出的是,图4(b)中并没有3个交点,中间的其实是函数在0.08611附近的一个间断点。如果整理原方程,在等号两侧同时乘以(0.10 -x/δCN-),再进行求解,那么图像中就只有两个交点。当然,这种整理对于本软件来说并非必要,而且还增加了求解时间。
例3 配制0.050 mol∙L-1的H2C2O4溶液用于酸碱滴定,由于失误使用了自来水。自来水的硬度较大,其中Ca2+的浓度约为0.0070 mol∙L-1。计算该溶液的pH。(CaC2O4:Ksp = 2.3×10-9;H2C2O4:K1 = 5.9×10-2,K2 = 6.4×10-5)
解:通过推导,得到以下两个方程:
方程组中的未知数是[H+]和[C2O42-]。将式(1)代入式(2)以消去[C2O42-],即可得到关于[H+]的方程。使用本软件时,其实没有必要推导出方程的显式形式,通过辅助变量即可。下面是参考代码,其中辅助变量aux3是通过式(1)得到的[C2O42-]。在Function功能区输入后单击“Finish”按钮。
ksp = 2.3e-9; k1 = 5.9e-2; k2 = 6.4e-5;
aux1 = x^2 + k1 * x + k1 * k2;
aux2 = (k1 * x + 2 * k1 * k2) * 0.043 / aux1 + 0.014 + 1e-14 / x -x;
aux3 = (2 * ksp -ksp * (k1 * x + 2 * k1 * k2)/aux1)/aux2;
y = aux3 -k1 * k2/aux1 * (0.043 + ksp/aux3);
在软件默认的求根区间10-14-1内绘图,见图5(a)。图像背景为绿色,单击“solve it”按钮,得到x = 0.1004。但是,这个结果与实际情况不符,因为0.050 mol∙L-1的H2C2O4即使完全离解,[H+]才是0.10。
图5
放大图像仔细检查函数与x轴的相交情况,结果见图5(b)。从中可以发现,在0.04附近函数值趋向正值,但是由于默认求根区间端点的数量级相差太大,致使0.04附近的数据点分配不足,正函数值最终没有能够出现。
基于上述分析,缩小求根区间,如0.03-0.04,重新绘图,即可求得[H+] = 3.97×10-2,这才是符合题意的解,所以pH = 1.40。
5 结语
在分析化学课程中大规模推广精确解析已经可行。“去公式化”课程体系提供了理论框架;计算设备的高性能和高度普及提供了硬件支持。为了提高效率,基于Matlab语言开发了一款方程求解软件。该软件突出易用性,对用户的编程要求非常低;针对化学平衡特点设计,提供简洁的界面、直观的图像和自然的人机交互,从而实现复杂方程的高效求解。还开发了Android系统版本,同样免费使用。该方案能够显著降低方程求解的软件使用成本,为化学平衡精确解析的大规模推广提供进一步支持。
参考文献
/
〈 | 〉 |