Zenn
🧪

二分探索を用いた酸塩基平衡シミュレーション

2021/07/22に公開

目標

この記事では,酸塩基平衡のシミュレータを作るためのアルゴリズムについて紹介します.

たとえば,以下の問題を解くことを考えます.

問題

酢酸 CH3COOH\rm CH_3COOH は以下のように電離する.

CH3COOHCH3COO+H+ \rm CH_3COOH \rightleftharpoons CH_3COO^- + H^+

電離定数は 104.7610^{-4.76} である.すなわち

[CH3COO][H+][CH3COOH]=104.76 \rm \frac{[CH_3COO^-][H^+]}{[CH_3COOH]} = 10^{-4.76} \\

リン酸 H3PO4\rm H_3PO_4 は以下のように電離する.

H3PO4H2PO4+H+H2PO4HPO42+H+HPO42PO43+H+ \begin{aligned} \rm H_3PO_4 &\rightleftharpoons \rm H_2PO_4^- + H^+ \\ \rm H_2PO_4^- &\rightleftharpoons \rm HPO_4^{2-} + H^+ \\ \rm HPO_4^{2-} &\rightleftharpoons \rm PO_4^{3-} + H^+ \end{aligned}

電離定数は順に 102.1210^{-2.12}107.2110^{-7.21}1012.6710^{-12.67} である.すなわち

[H2PO4][H+][H3PO4]=102.12[HPO42][H+][H2PO4]=107.21[PO43][H+][HPO42]=1012.67 \begin{aligned} \rm \frac{[H_2PO_4^-][H^+]}{[H_3PO_4]} &= 10^{-2.12} \\ \rm \frac{[HPO_4^{2-}][H^+]}{[H_2PO_4^-]} &= 10^{-7.21} \\ \rm \frac{[PO_4^{3-}][H^+]}{[HPO_4^{2-}]} &= 10^{-12.67} \\ \end{aligned}

今,ビーカーに 1[L]1 [{\rm L}] の水を入れ,そこに酢酸を c1[mol]c_1 [{\rm mol}],リン酸を c2[mol]c_2 [{\rm mol}] 溶かした.この水溶液の pH\rm pH を求めなさい.

一般化

この問題は以下のように一般化されます.

mm 種類の酸についての情報が与えられる. ii 番目(1im1 \le i \le m)は nin_i 価の酸 AiHni{\rm A}_i {\rm H}_{n_i} であり,以下のように電離する.

AiHniAiHni1+H+AiHni1AiHni22+H+AiH(ni1)Aini+H+ \begin{aligned} {\rm A}_i {\rm H}_{n_i} &\rightleftharpoons {\rm A}_i {\rm H}_{n_i - 1}^- + {\rm H}^+ \\ {\rm A}_i {\rm H}_{n_i - 1}^- &\rightleftharpoons {\rm A}_i {\rm H}_{n_i - 2}^{2-} + {\rm H}^+ \\ &\vdots \\ {\rm A}_i {\rm H}^{(n_i - 1)-} &\rightleftharpoons {\rm A}_i^{n_i-} + {\rm H}^+ \end{aligned}

ii 番目の酸の第 jj 解離定数は KijK_{ij} である.すなわち,

[AiHni1][H+][AiHni]=Ki1[AiHni22][H+][AiHni1]=Ki2[Aini][H+][AiH(ni1)]=Kini \begin{aligned} \frac{[{\rm A}_i {\rm H}_{n_i - 1}^-][{\rm H}^+]}{[{\rm A}_i {\rm H}_{n_i}]} &= K_{i1} \\ \frac{[{\rm A}_i {\rm H}_{n_i - 2}^{2-}][{\rm H}^+]}{[{\rm A}_i {\rm H}_{n_i - 1}^-]} &= K_{i2} \\ &\vdots \\ \frac{[{\rm A}_i^{n_i-}][{\rm H}^+]}{[{\rm A}_i {\rm H}^{(n_i - 1)-}]} &= K_{in_i} \end{aligned}

今,ビーカーに 1[L]1 [{\rm L}] の水を入れ,そこに酸 A1Hn1{\rm A}_1 {\rm H}_{n_1}c1[mol]c_1 [{\rm mol}],酸 A2Hn2{\rm A}_2 {\rm H}_{n_2}c2[mol]c_2 [{\rm mol}],……,酸 AmHnm{\rm A}_m {\rm H}_{n_m}cm[mol]c_m [{\rm mol}] 溶かした.この水溶液の pH\rm pH を求めなさい.

方針

まず, H+\rm H^+ の濃度を決め打ちします.すると,電離平衡の式から各々の酸 AiHni{\rm A}_i {\rm H}_{n_i} について

[AiHni]:[AiHni1]=[H+]:Ki1[AiHni1]:[AiHni22]=[H+]:Ki2[AiH(ni1)]:[Aini]=[H+]:Kini \begin{aligned} [{\rm A}_i {\rm H}_{n_i}] : [{\rm A}_i {\rm H}_{n_i - 1}^-] &= [{\rm H}^+] : K_{i1} \\ [{\rm A}_i {\rm H}_{n_i - 1}^-] : [{\rm A}_i {\rm H}_{n_i - 2}^{2-}] &= [{\rm H}^+] : K_{i2} \\ &\vdots \\ [{\rm A}_i {\rm H}^{(n_i - 1)-}] : [{\rm A}_i^{n_i-}] &= [{\rm H}^+] : K_{in_i} \\ \end{aligned}

のように濃度の比 [AiHni]:[AiHni1][{\rm A}_i {\rm H}_{n_i}] : [{\rm A}_i {\rm H}_{n_i - 1}^-][AiHni1]:[AiHni22][{\rm A}_i {\rm H}_{n_i - 1}^-] : [{\rm A}_i {\rm H}_{n_i - 2}^{2-}],……,[AiH(ni1)]:[Aini][{\rm A}_i {\rm H}^{(n_i - 1)-}] : [{\rm A}_i^{n_i-}] が分かるので,これらを合わせて比 [AiHni]:[AiHni1]:[AiHni22]::[Aini][{\rm A}_i {\rm H}_{n_i}] : [{\rm A}_i {\rm H}_{n_i - 1}^-] : [{\rm A}_i {\rm H}_{n_i - 2}^{2-}] : \cdots : [{\rm A}_i^{n_i-}] が求まります.

一方これらの濃度の合計 [AiHni]+[AiHni1]+[AiHni22]++[Aini][{\rm A}_i {\rm H}_{n_i}] + [{\rm A}_i {\rm H}_{n_i - 1}^-] + [{\rm A}_i {\rm H}_{n_i - 2}^{2-}] + \cdots + [{\rm A}_i^{n_i-}]ci[mol/L]c_i [\rm mol/L] であると分かっているので,比の情報と合わせることで濃度 [AiHni][{\rm A}_i {\rm H}_{n_i}][AiHni1][{\rm A}_i {\rm H}_{n_i - 1}^-][AiHni22][{\rm A}_i {\rm H}_{n_i - 2}^{2-}],……,[Aini][{\rm A}_i^{n_i-}] が全て求まります.

ここで, AiHni1{\rm A}_i {\rm H}_{n_i - 1}^-11 価, AiHni22{\rm A}_i {\rm H}_{n_i - 2}^{2-}22 価,……, Aini{\rm A}_i^{n_i-}nin_i 価の陰イオンであることに着目すると,これらのもつ電荷の合計は

j=1nij[AiHnijj]=1[AiHni1]2[AiHni22]ni[Aini] \sum_{j = 1}^{n_i} -j[{\rm A}_i {\rm H}_{n_i - j}^{j-}] = -1 [{\rm A}_i {\rm H}_{n_i - 1}^-] -2 [{\rm A}_i {\rm H}_{n_i - 2}^{2-}] - \cdots - n_i [{\rm A}_i^{n_i-}]

となります. mm 種類全ての酸についてこれを計算し,総和

S=i=1mj=1nij[AiHnijj] S = \sum_{i = 1}^{m} \sum_{j = 1}^{n_i} -j[{\rm A}_i {\rm H}_{n_i - j}^{j-}]

を求めます.

もし,最初に決め打ちした [H+]\rm [H^+] の値が正しければ,水溶液は電気的に中性なので [H+]+S=0[{\rm H}^+] + S = 0 となるはずです.

では,決め打ちした [H+]\rm [H^+] の値が実際より大きかったらどうなるでしょうか?これは,いったん水溶液に強酸 AH\rm AH を加えて,平衡に達したところで突然陰イオン A\rm A^- だけを取り除いた状況(実際にはあり得ないが)と同じなので, [H+]+S>0[{\rm H}^+] + S > 0 となります.

逆に [H+]\rm [H^+] の値が実際より小さければ, [H+]+S<0[{\rm H}^+] + S < 0 となります.

よって, [H+]\rm [H^+] を決め打ちしたらそれが実際より大きいか小さいか分かるので,二分探索によって [H+][\rm H^+] を求めることができます.

おわりに

この方法によって,様々な種類の酸が混ざった水溶液の pH\rm pH を簡単に求めることができます.酸だけでなく塩基も含まれる場合や,塩を溶かす場合についても,同様に解くことができます.

なんだか用途の限られた(?)記事になってしまいましたが,誰かの役に立てば幸いです.

誰かこれ読んでブラウザ上で簡単にシミュレーションができる Web サイト作って欲しい
なんと THF さんが作ってくださいました!ここで実行できます.

Discussion

ログインするとコメントできます