見出し画像

分析化学の話(1) - ランベルト・ベールの法則のシミュレーション

ランベルト・ベールの法則について、格子モデルに基づいたシミュレーションを行いました。果たして結果は法則を再現するのでしょうか?


はじめに:私は分析化学の専門家ではないので、疑問に思ったことをトピック的に取り上げるつもりです。なので、内容はバラバラです。

1.ランベルト・ベールの法則 [1]

1.1 吸光度Aは、光路長lまたは濃度cに比例する

$$
A = -\log_{10} \Big (\dfrac{I}{I_0} \Big ) = -\log_{10} T =\epsilon cl \quad \quad \quad(1)
$$

$${A}$$:吸光度、$${I_0}$$:入射光の強度、$${I}$$:透過光の強度、$${T(=I/I_0)}$$:透過率、$${\epsilon}$$:モル吸光係数(試料に固有の値)、$${c}$$:モル濃度($${\mathrm{mol/L}}$$)、$${l}$$:光路長($${\mathrm{cm}}$$)


図1 吸光度測定用のセルの様子。セルには試料の溶液が入っています。セルの材質には石英、ガラス、プラスチックが使われます。試料の吸収が邪魔にならないように材質を選びます。よく使用されるのは、光路長×光路幅×高さが、10 mm×10 mm×45 mmのセルです。絵とだいぶ違いますね。

1.2 よくある説明に対する感想

簡単な微分方程式から説明することはよくあります[2]:

$$
\mathrm{d}I = - \beta I c \mathrm{d}x \quad \quad \quad \quad (1)
$$

ここで$${\beta}$$は物質に固有の定数、$${\mathrm{d}x}$$は微小光路長です。
 式は簡単に解けます。でも、わかったようなわからないような、これが頭の回転がよくない私の感想でした。「なぜ強度の減少分が強度に比例するのか、なぜ濃度に比例するのか?それならシミュレーションでもやってみよう。そしたら、ビジュアルにわかる。」最初はMicrosoft Excelでやっていたんですが、これが大変。その後、プログラム言語Pythonでシミュレーションをやってみようと思いつきました。

2.Pythonによるシミュレーション

2.1 アイデア

いわゆる格子モデルに基づいたシミュレーションに相当すると思われます。決まった形の格子に溶質分子と溶媒分子を配置するアイデアです。格子モデルによって生まれた理論は、荒っぽいけど問題の本質をよく説明することがよくあります[3]。

2.2 手順

手順1: 溶液を何層かにスライスします(図2)。

図2 (a)光が通過する方向に直角に何層か適当にスライスする。(b)スライスされた何番目かの層(layer)。

手順2: 各層(layer)を碁盤の目に区切り、"セル"(図1とは違う意味です)を作ります。決まった数の溶質分子と溶媒分子とを碁盤にランダムにセルに配置します。ランダムは、溶質分子も溶媒分子も絶えず動き回っていることを反映しています。ただし、溶質分子が重ならないように配置します。このとき、溶質分子は100%光を吸収して通さない、溶媒分子は100%光を通すと仮定します。

図3 各層を碁盤の目のように分けます。図は、100個の"セル"にランダム(乱数を発生する)に溶質分子を振り分けた例です。黒は溶質分子、白は溶媒分子を表します。ただし、黒が重ならないように乱数を発生させます。この例では、100個のセルのうち20個のセルに溶質分子を配置しました。濃度は体積分率で、0.2(=20/100)です。白いセルは光を通し、黒いセルは光を通しません。

手順3:一番目の層から最後の層まで重ね合わせて、全部溶媒であるセルを数えます(図4(b)では52個)。これらのセルが光の通り抜ける道となります。層(layer)が増えれば増えるほど、光が通り抜けづらくなります。

図4 (a)例として、溶液を3層(layer)にスライス。セルの数は各層で100個です。それぞれの層で乱数を発生させます。その結果、溶質分子(黒)がさまざまなセルに配置されます。(b)3層を重ね合わせます。より黒いセル(12個ある)は溶質分子が重なっていることを表します。この重なりがランベルト・ベールの法則のポイントのような感じがします。52個の白いセルだけ光を通します。この例の場合、透過率Tは52/100 = 0.52、吸光度Aは-logT = 0.28となります。

手順5:手順3→手順4を数回繰り返し、白いセルの数の平均と標準偏差を計算します。偏りを少なくすためです。

手順6:溶質分子の濃度(黒いセルの個数÷全体のセルの個数)ごとに、白いセルの平均をもとに透過率Tと吸光度Aを計算します。必要に応じてグラフを作成します。

1) 層(layer)の数がセルの光路長に相当すると考えます。

3.シミュレーションの結果

3.1 シミュレーションの条件

  • 使用言語: Python 3.10.9(Jupyter notebook)

  • 使用モジュール : numpy 1.23.5

  • 乱数の発生: PCG64(ただし、ひとつの層内では溶質分子(黒)が重ならないように一様に乱数を発生)

  • セルの数/層(layer): 10,000個

  • 溶質分子の個数/層(layer):1〜9個

  • 繰り返し数: 3回

  • 層(layer)数: 100〜5,000(1,000以降は500刻み)

3.2 透過率の濃度依存性

図5 透過率Tのシミュレーションの結果(○)。体積分率(濃度に相当)0.001は、有機物質の場合質量濃度にしてほぼ1 mg/mL程度です。同じ濃度でも、層(layer)の数が増すほど透過率が小さくなっています。なお、右の凡例の"layers"は、層(layer)の数を表します。

3.3 吸光度の濃度依存性

図5のデータをもとに、吸光度を計算した結果が図6です。シミュレーションで計算された吸光度が濃度に比例していることがわかります。

図6 シミュレーションの結果得られた吸光度は体積分率(濃度)に比例しています。一般的には、吸光度Aが0.2〜0.8になるように濃度を調製するとよいといわれています[4]。

3.4 吸光度の光路長依存性

図7では、吸光度Aが光路長lに比例していることがわかります。シミュレーションでは、層(layer)を重ねることは光路長を長くすることに対応します。

図7 どの濃度(Fractionは体積分率のこと)でも、吸光度Aが層(layer)の枚数に比例していることがわかります。層の枚数は光路長に対応していると考えられます。

4.結論

Pythonによる格子模型に基づいたシミュレーションは、ランベルト・ベールの法則をよく説明していると思いますが、みなさんはどう思われますか?式(1)のシミュレーションをいつかしたいと思います。

文献

[1] Lambert-Beer law。Beer-Lambert lawとも。ランベルトの法則は吸光度が光路長に比例することを、ベールの法則は吸光度が濃度に比例することをいいます。
[2] Harris, D.C. "Quantitative Chemical Analysis, 8th Ed.", W.H.Freeman and Company, NY, 2010. 他に、インターネットで検索すれば、このような説明にこと欠きません。
[3] 私がよく知っている格子モデルは、高分子化学分野のFlory-Hugginsの格子模型です。その他にも物理化学といわれる分野ではさまざまな格子モデルがあります。
[4] 化学同人編集部編、"実験データを正しく扱うために"、化学同人、2007.



【免責事項】本記事は単なるメモとして書かれたもので、その正確性を必ずしも保証するものではありません。本記事によって生じたトラブル、損失、又は損害に対して一切責任を負いません。また、著者が所属する組織とは関係ありません。誤りがあればご指摘ください。クレームはご遠慮ください。



この記事が気に入ったらサポートをしてみませんか?