目標
この記事では,酸塩基平衡のシミュレータを作るためのアルゴリズムについて紹介します.
たとえば,以下の問題を解くことを考えます.
問題
酢酸 \rm CH_3COOH は以下のように電離する.
\rm CH_3COOH \rightleftharpoons CH_3COO^- + H^+
電離定数は 10^{-4.76} である.すなわち
\rm \frac{[CH_3COO^-][H^+]}{[CH_3COOH]} = 10^{-4.76} \\
リン酸 \rm H_3PO_4 は以下のように電離する.
\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}
電離定数は順に 10^{-2.12},10^{-7.21},10^{-12.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 [{\rm L}] の水を入れ,そこに酢酸を c_1 [{\rm mol}],リン酸を c_2 [{\rm mol}] 溶かした.この水溶液の \rm pH を求めなさい.
一般化
この問題は以下のように一般化されます.
m 種類の酸についての情報が与えられる. i 番目(1 \le i \le m)は n_i 価の酸 {\rm A}_i {\rm H}_{n_i} であり,以下のように電離する.
\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}
i 番目の酸の第 j 解離定数は K_{ij} である.すなわち,
\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 [{\rm L}] の水を入れ,そこに酸 {\rm A}_1 {\rm H}_{n_1} を c_1 [{\rm mol}],酸 {\rm A}_2 {\rm H}_{n_2} を c_2 [{\rm mol}],……,酸 {\rm A}_m {\rm H}_{n_m} を c_m [{\rm mol}] 溶かした.この水溶液の \rm pH を求めなさい.
方針
まず, \rm H^+ の濃度を決め打ちします.すると,電離平衡の式から各々の酸 {\rm A}_i {\rm H}_{n_i} について
\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}
のように濃度の比 [{\rm A}_i {\rm H}_{n_i}] : [{\rm A}_i {\rm H}_{n_i - 1}^-],[{\rm A}_i {\rm H}_{n_i - 1}^-] : [{\rm A}_i {\rm H}_{n_i - 2}^{2-}],……,[{\rm A}_i {\rm H}^{(n_i - 1)-}] : [{\rm A}_i^{n_i-}] が分かるので,これらを合わせて比 [{\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-}] が求まります.
一方これらの濃度の合計 [{\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-}] は c_i [\rm mol/L] であると分かっているので,比の情報と合わせることで濃度 [{\rm A}_i {\rm H}_{n_i}],[{\rm A}_i {\rm H}_{n_i - 1}^-],[{\rm A}_i {\rm H}_{n_i - 2}^{2-}],……,[{\rm A}_i^{n_i-}] が全て求まります.
ここで, {\rm A}_i {\rm H}_{n_i - 1}^- は 1 価, {\rm A}_i {\rm H}_{n_i - 2}^{2-} は 2 価,……, {\rm A}_i^{n_i-} は n_i 価の陰イオンであることに着目すると,これらのもつ電荷の合計は
\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-}]
となります. m 種類全ての酸についてこれを計算し,総和
S = \sum_{i = 1}^{m} \sum_{j = 1}^{n_i} -j[{\rm A}_i {\rm H}_{n_i - j}^{j-}]
を求めます.
もし,最初に決め打ちした \rm [H^+] の値が正しければ,水溶液は電気的に中性なので [{\rm H}^+] + S = 0 となるはずです.
では,決め打ちした \rm [H^+] の値が実際より大きかったらどうなるでしょうか?これは,いったん水溶液に強酸 \rm AH を加えて,平衡に達したところで突然陰イオン \rm A^- だけを取り除いた状況(実際にはあり得ないが)と同じなので, [{\rm H}^+] + S > 0 となります.
逆に \rm [H^+] の値が実際より小さければ, [{\rm H}^+] + S < 0 となります.
よって, \rm [H^+] を決め打ちしたらそれが実際より大きいか小さいか分かるので,二分探索によって [\rm H^+] を求めることができます.
おわりに
この方法によって,様々な種類の酸が混ざった水溶液の \rm pH を簡単に求めることができます.酸だけでなく塩基も含まれる場合や,塩を溶かす場合についても,同様に解くことができます.
なんだか用途の限られた(?)記事になってしまいましたが,誰かの役に立てば幸いです.
誰かこれ読んでブラウザ上で簡単にシミュレーションができる Web サイト作って欲しい
なんと THF さんが作ってくださいました!ここで実行できます.
Discussion