崔皓 劉璽正 婁宏磊
(上海交通大學(xué)附屬中學(xué) 上海 200439)
pH值是氫離子濃度的負(fù)對數(shù),是一個描述體系中酸堿性的強弱程度的量。氫離子濃度對于化學(xué)反應(yīng)速率、反應(yīng)進行程度、反應(yīng)生成物等都有較大的影響:酯類的水解在酸性條件下比在中性條件下更快;Pbo2在酸性條件下是最強的氧化劑之一,可以輕易把HCL氧化為CL2,而在堿性條件下CL2可以氧化Pb(Ⅱ)即為Pbo2;DNA擴增時,氫離子濃度過大甚至還會導(dǎo)致堿基錯配[1]。
綜上可知,氫離子濃度在很大程度上影響了化學(xué)反應(yīng),在進行反應(yīng)之前就通過計算了解估計體系的pH可以為后續(xù)工作提供很大便利。
在計算溶液體系pH值時,列多個酸等式連立求解是常見的傳統(tǒng)方法,但是這種方法計算量大,過程復(fù)雜,給相關(guān)學(xué)習(xí)者與工作者帶來了不少麻煩。
比如,在使用傳統(tǒng)方法計算0.1mol/l二元酸鹽NaHY體系pH值時,有:
由電荷守恒和化學(xué)平衡列方程組:
可見,該方法十分復(fù)雜,且當(dāng)體系物質(zhì)增多時,計算復(fù)雜度將進一步提升。
為了簡化計算復(fù)雜度,本文使用計算機程序并采用列離子電荷守恒方程的方法,對于未知濃度的弱酸弱堿離子使用分布分?jǐn)?shù)表達并將其帶入方程,進行求解后得到氫離子濃度,進而通過計算機快速地計算并得到可靠精確的溶液pH值。
在本方法中,不使用最基礎(chǔ)的“列多個酸堿平衡連立求解”的原因是計算機計算能力是足夠強大的,完全可以滿足一元分式方程的求解需要,但相較而言,多元方程的輸入以及求解對于計算機則較難實現(xiàn)[2]。
使用的離子電荷守恒方程的形式如下:
其中:1×[H3Y-]-2×[H2Y2-]-3[HY3-]-4×[Y4-]-……項是可以使用分布分?jǐn)?shù)表示的。
分布分?jǐn)?shù)(distribution fraction)是平衡體系中,同一物質(zhì)各種存在型體的平衡濃度與其總濃度之比。在同一酸性條件下,同一物質(zhì)的單一形體所占據(jù)總分析濃度的比值是確定的,以下給出證明(一元酸):
對于酸HA,它僅有一級解離,以[HA]和[A-]兩種形體存在,把HA的分析濃度設(shè)為c,δ0和δ1分別是A-和HA的分布分?jǐn)?shù),有:
這個算法也可以推廣到多元酸,本程序中就采用了四元酸的分布分?jǐn)?shù)公式。
首先看一個例子分析:
例:若將0.2mol HCL,0.1mol NH4CL,0.15mol Na2HPO4加入1L水中,計算體系的氫離子濃度。
解:設(shè)[H+]=x
由離子電荷守恒列出方程:
此方程中:
求解得:
X=3.42296×10-3,即[H+]=3.42296×10-3
體系pH=-lg(x)=2.466
通過上述計算,我們發(fā)現(xiàn)在計算體系pH值的時候,只需要知道體系中的固定不變的陽離子和陰離子電荷數(shù)(例子中是[Na+]和[CL-],通式中就是不可水解的陰/陽離子電荷),加入的弱酸弱堿的分析濃度、弱酸弱堿(弱堿的共軛酸)的各級解離常數(shù)以及弱酸弱堿各種形體帶有的電荷量等即可通過解方程解出氫離子濃度。
綜上,對程序設(shè)計過程所需要的確定體系狀態(tài)的數(shù)據(jù)有了明確的思路。
本文中使用的Python版本為3.8.1,編譯器為Python IDLE。
根據(jù)上述分析,實現(xiàn)混合溶液體系pH值的計算,主要需要解決以下幾個問題:
第一,適用范圍:不適用于會生成氣體、沉淀的體系;
第二,有關(guān)各個弱酸弱堿信息的儲存;
第三,有關(guān)各個弱酸弱堿信息的提取;
第四,離子電荷守恒方程的求解;
第五,體系pH值的輸出。
由上述分析不難發(fā)現(xiàn),想要計算一個溶液體系pH值,我們需要知道以下常量:
(1)弱酸弱堿(弱堿的共軛酸)的各級解離常數(shù)。
(2)弱酸弱堿最酸形式所帶電荷數(shù)(例如N+4H為“1”,H3PO4為“0”,為“-1”)。
考慮到輸入、修改和提取數(shù)據(jù)的便利程度,使用Excel表格形式儲存上述常量,其中,方便起見,弱酸弱堿的各級解離常數(shù)以其負(fù)對數(shù)的形式儲存,若某物質(zhì)沒有某一級的解離常數(shù),則設(shè)定為一個足夠大的數(shù)99。具體形式如表1所示。
表1 參數(shù)表部分?jǐn)?shù)據(jù)
通過Python庫中的xlrd模塊可以方便地實現(xiàn)對于excel表格中數(shù)據(jù)的提取。
在程序中,首先需要輸入計算所涉及的弱酸弱堿的種類數(shù)與其名稱,接下來在程序中通過已經(jīng)建立的循環(huán)結(jié)構(gòu),對Excel表格進行遍歷,查找弱酸弱堿所對應(yīng)的信息,再通過列表嵌套的方法使信息與各個所需弱酸弱堿一一對應(yīng)并儲存下來,最后需要輸入不可水解的陰陽離子的電荷數(shù),方便之后的計算。
(1)程序需要解的方程
經(jīng)過化簡,可得到與原離子電荷守恒方程等價的方程:
(2)程序解方程方法的選取
上述方程是一個較為復(fù)雜的分式方程,結(jié)合方程的實際意義考慮,可使用二分法進行求解。
由于在確定了溶液狀態(tài)之后,溶液的pH值唯一確定,也即在一般情況下,該方程在區(qū)間[10-15,100]上有且僅有唯一實數(shù)解,結(jié)合與該方程對應(yīng)的分式函數(shù)y=f(x)在定義域上連續(xù)的特點,使用二分法是高效可靠的方法。
所謂二分法,就是對于區(qū)間[p,q]上連續(xù)不斷且滿足f(p)·f(q)<0的函數(shù)y=f(x),通過不斷地把函數(shù)y=f(x)的零點所在的區(qū)間一分為二,使區(qū)間的兩個端點逐步逼近零點,進而得到零點近似值的方法。
(3)使用二分法解方程在Python環(huán)境中的實現(xiàn)與體系pH值的輸出
劃定一個合理x值的范圍[p,q]。(初始默認(rèn)值設(shè)定為[10-15,100]),井且計算。設(shè)函數(shù)f(x)=方程左式,并計算。因為函數(shù)y=f(x)在區(qū)間[p,q]上是隨著x的增大而單調(diào)遞增的,所以如果的計算結(jié)果小于0,則將設(shè)置為新的p值,并重新開始循環(huán);如果的計算結(jié)果大于0,則將設(shè)置為新的q值,并重新開始循環(huán),憑借該操作可使區(qū)間[p,q]的兩個端點不斷逼近函數(shù)y=f(x)的零點,進而得到零點的近似值。結(jié)束循環(huán)的標(biāo)志在程序中表現(xiàn)為的絕對值小于10-15(該值可根據(jù)不同的精度要求調(diào)節(jié)具體大?。⑤敵龃藭rx的值的負(fù)對數(shù),也即溶液pH值的近似值。
使用Python launcher或其他Python編譯器運行程序(以Python launcher舉例)。
根據(jù)提示輸入物質(zhì)的種類數(shù)、名稱與相應(yīng)的分析濃度、不可水解的陰陽離子的分析濃度,即可求解。
例如:某混合溶液含有0.10mol/l HCL、2.0×10-4mol/l NaHSO4和2.0×10-6mol/l HAc,計算此混合溶液的pH。(參考答案:1.00)
程序?qū)崿F(xiàn)過程:本題當(dāng)中有兩種會水解的物質(zhì):硫酸氫根與醋酸根,濃度分別為0.0002mol/l與0.000002mol/l,不可水解的陽離子電荷數(shù)為0.0002mol/l(Na+),不可水解的陰離子電荷為0.01mol/l(CL-)。
根據(jù)程序提醒,輸入相應(yīng)信息,具體流程如下所示:
表2列出同一體系溶液情況下,應(yīng)用本程序計算的pH值和參考書中pH值實際值得對比,進一步驗證該程序計算的正確性。
表2 計算值與實際值的對比
該程序完成了多種不會互相反應(yīng)生成沉淀,氣體的物質(zhì)所構(gòu)成水溶液體系的pH值計算,給予了其可靠的計算結(jié)果,顯著節(jié)省了相關(guān)工作者與學(xué)習(xí)者的計算時間。在將來的改進中,將著重解決與沉淀氣體有關(guān)體系的pH值計算的可行性,擴大程序的適用范圍。