奇异值计算mathematica_使用计算器迭代解方程的方法 解决分析化学中的平衡计算问题...

分析化学中常常出现各种各样奇奇怪怪的近似,例如一元弱酸pH的计算何时可以用近似式、何时可以用最简式。实际上,近似的使用都源自计算力的不足。在有计算器的情况下,很多问题都可以直接精确求解,而那些玄学的近似条件就变得不那么必要。

⚠不同计算器上的操作可能有区别。不应盲目照搬本文的按键操作。

⚠利用本文的方法,不代表可以完全抛弃必要的近似。因为精确迭代算式的推导可能很麻烦,或推出来之后发现难以收敛。

一元弱酸pH的迭代计算

给定一元弱酸的

,计算溶液pH值。我们知道有精确式(未作任何近似的表达式,推导略):

将它写成迭代的形式:

我们以 0.1 mol/L 醋酸为例,在计算器上进行这一计算。首先存储各个参数。

用变量A存储

,按键如下:(某些版本的计算器不需要按

(请原谅我不知道如何把这里的框弄得一样大)

此时屏幕显示

的值。类似地,用变量B和C分别储存
,按键如下:

至此我们完成了参数的设定。下面设置初猜(即迭代第一轮所使用的

的估计值)。一个较通用的初猜是使用
,按键如下:

此时屏幕显示

的值0.05。而后我们输入迭代表达式:

其中

表示使用上一轮的计算结果。之后即可一直按
直至结果收敛。我们可以看见,按
两次之后就得到了
,按三次之后就得到了
的相当精确的结果。

亦可将此精确结果和直接使用最简式得到的结果对比:

结果并没有差太多。

我们再以0.1 mol/L二氯乙酸(pKa=1.30)和0.01 mol/L盐酸甲胺(pKa=10.64)为例。

0.1 mol/L二氯乙酸(pKa=1.30)仿照上面的过程,2轮之后也收敛到了0.0500 mol/L,显然在这一体系中,电离对游离的酸分子的浓度的影响已经不可忽略。如果这时我们仍然用最简式计算:

显然与精确值有极大的差距。如果酸性再强一点或者酸浓度再低一点,甚至可能算出氢离子浓度大于酸浓度的结果!

0.01 mol/L盐酸甲胺(pKa=10.64)仿照上面的过程,2轮之后也收敛到了

,显然在这一体系中,水的电离已经不可忽略。如果忽略水的电离,用下面的式子迭代:

我们发现最终得到

,与精确值有较明显的差距。

思考 我们这类问题中使用的迭代算式

也可以写作

因此可写为如下的迭代的形式:

用这个迭代算式进行迭代会发生振荡(指迭代结果越来越偏离解的行为)。任选上面三个问题中的一个,验证振荡的发生。仿照高数课上学习的级数收敛和发散的判定,试着总结一下,怎样的式子不容易发生振荡?有什么方法可以抑制振荡?文末有参考答案。

多元弱酸pH的迭代计算

以0.1 mol/L砷酸为例(pKa1=2.21,pKa2=6.93,pKa3=11.51)。令

,代入下面的方程(物料守恒和质子守恒方程):

我们有:

参照上面“思考”栏目中对收敛性的讨论,我们将其写作:

写成迭代的形式:

仍然使用

的初猜,我们发现6轮内就基本收敛到了
的结果,多次迭代后可得更精确值。

思考 本题中,如果只考虑第一级电离,使用最简式计算,得到什么结果?误差大吗?什么样的多元酸适合用这种迭代的方法进行计算?

思考 本题中,用下面的式子进行迭代计算,验证振荡的发生。

将上面的迭代式子略加改写:

观察是否发生振荡。

两性物种pH的迭代计算

以0.1 mol/L丁二酸氢钠(NaHA)为例(pKa1=4.21,pKa2=5.64)。设

(如果设
然后求
,那么后面将面对
在计算中可能出现负数而无法开方的问题;设一个像
这样的我们预计在计算过程中改变不大的量,则是有利的),代入下面的方程(物料守恒和质子守恒):

我们有:

我们将其写作:

写成迭代的形式:

使用最简式给出的初猜

,也可迅速收敛。在计算器中可以通过输入表达式而后屡次上翻的方法切换两个方程,不用每次都输一遍。

以丁二酸氢钠的分析浓度的负对数pC为横轴,溶液pH(左,绿色)和丁二酸一氢根的分布系数x(HA-)为纵轴,绘图如下:

92c9664f-4017-eb11-8da9-e4434bdf6706.png

思考 可以从这张图中解读出什么信息?为什么中间有很陡峭的一段?

小结

迭代是解决非线性复杂方程的常用策略,且对计算器使用者友好,在很多情况下是一种优良的策略,可以帮助我们精确求解平衡问题。利用一些策略,例如与上一步的结果加权平均、限制迭代算式次数在(-1,1)之间、尽量选用变动不大的变量等,可以有效提高迭代收敛的成功率,但也并不总是可以成功;同时,精确的迭代算式的推导仍然很可能很麻烦。因此,适当的近似仍然常常是必要的,迭代法的使用绝不代表可以完全抛弃必要的近似。

参考答案(怎样的式子不容易发生振荡,如何抑制振荡)

一般来说,在形如x = f(x)的迭代算式中,f(x)次数绝对值小于1的时候不容易发生振荡,如果f(x)次数等于1而一次项系数小于1,也不太可能发生振荡。因此,一个较好的策略是,在关于x的方程中,我们将最高次项放在左边,而后同时开最高次方,得到迭代算式。

如果振荡发生了,一个很好的抑制振荡的方法是将这次算出的结果和上次的混合,取平均值。例如,x = 0.1f(x) + 0.9x 比 x = f(x) 容易收敛。也可以用几何平均或其它你认为合适的平均。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值