読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

(40) 化学平衡

従兄のジョーは化学工場の研究員である。彼は価値のある衛生商品を作り出す上で不可欠の材料であるSuperzapという物資の分析を任されている。SuperzapはZapとRegant Bから以下の反応によって合成される。

ZapとRegant Bよりずっと高価である。この反応定数Kは小さくK=0.01である。したがって、ジョーの最初のSuperzap生産の結果はあまりよくなかった。彼はこの問題をZapの濃度を上げることによって克服しようとしてが、彼は問題を悪い方向へ持っていくだけだという忠告に耳を貸そうとしない。


という化学反応の場合、平衡定数は、各平衡濃度から以下のように定義されます。
初期濃度からxだけ反応が進み、平衡に達すると考えると、初期濃度と平衡定数からxを求めることができます。これをMaximaで解いてみましょう。

/* 7.1.13m */
ae : a0 - x$
be : b0 - x$
ce : c0 + x$
de : d0 + x$
sol : solve(k = (ce*de)/(ae*be), x)$

求めた解を使って、Bの濃度を一定にして、Aの濃度を上げていった時、Aの変換率がどう変わるか見てみましょう。

/* 7.1.14m */
b0 : 1$
c0 : 0$
d0 : 0$
k : 0.01$
print("[A]0  [B]0  [Fraction converted]");
for a0 : 25 step 25 thru 100 do (
  print(a0, "  ", b0, "  ", ev(x/a0, sol[1]))
  );

Aの濃度を一定にして、Bの濃度を上げていった時、Aの変換率がどう変わるか見てみましょう。

/* 7.1.15m */
a0 : 1$
c0 : 0$
d0 : 0$
k : 0.01$
print("[Zap]0  [B]0  [Fraction converted]")$
for b0 : 25 step 25 thru 100 do (
  print(a0, "  ", b0, "  ", ev(x/a0, sol[1]))
  )$

ジョーには、Regant Bの濃度を上げることで生産効率が上げられることを伝えましょう。

これは、化学というより、計算のパズルですね。一見、AとBは対称な問題に見えますが、さて手品の種はどこにあるかわかりますか?