名城大学理工学部 応用化学科 永田研究室
トップ 教育 研究 プロフィール アクセス リンク キャラクター ブログ
トップ  >  ブログ

 

ブログ「天白で有機化学やってます。」 ブログ「天白で有機化学やってます。」

特異値分解を使ったスペクトルの成分解析(つづき)2024/04/08(月)

先日書いた「特異値分解を使ったスペクトルの成分解析」について、補足します。気がついた方もおられるかもしれませんが、実は特異値分解を使わなくても同じ計算ができます。やってみましょう。下の式から始めます。A, P, Q の意味は前回と同じです。つまり、この式は、実測データ A が4つの化学種のスペクトルの重ね合わせで表されることを示しています。P は4つの化学種のスペクトルを横に並べたもの(この段階では未知)、Q は4つの化学種のモル分率のリストを縦に並べたものです(平衡定数 K1, K2を決めれば計算できる)。

ここで、もし4x4行列 QQT が正則であれば、上の式の両辺に右から QT(QQT)-1 をかけると、AQT(QQT)-1 = PQQT(QQT)-1 = P です。A, Q は既知ですから、P が一意に決まることになります。え、これだったら、別に特異値分解要らんかったんちゃうの??

ここでポイントになるのが、前回も述べた「行列データをより少ない成分の重ね合わせで表現する」ことです。特異値分解の結果を見ると、「いくつの成分で表現するのが妥当か」が推測できるのです。今回のデータ A を A = USV と特異値分解して、S の対角成分を順に書くと、下のようになっています。

4.32625475e+03 1.08801469e+03 4.06096324e+02 1.75135540e+02
3.17925912e+01 4.86576065e+00 2.04487512e+00 1.30610531e+00 ...

この対角成分が十分に小さくなるところからは、成分としての寄与は小さいとみなすことができます。上の数値でどこからが「十分に小さい」かは判断が難しいところですが、少なくとも4つ目までは無視できないことは明らかです。つまり、少なくとも4つの成分はある、ということがわかります。

さて、元データを一部削って、「2当量」までの結果を使ってみましょう。この系では、2当量まではほぼCu2+, CuL2+, CuL22+ の3つの化学種しかないので、成分は3つになるはずです。実際、この場合の特異値は下のようになります。

3.80886470e+03 6.83421853e+02 2.09568976e+02 7.22768431e+00
3.03584696e+00 2.17037669e+00 1.28402520e+00 8.28483197e-01

今度は、4つ目で値が急に小さくなっていることがわかります。これは、実測データが「3成分の重ね合わせ」で表現できる、ということを意味しています。実際、「3成分」で解析してみると、下のように3つの化学種のスペクトルが得られます。

これを無理やり4成分で解析すると、下のように4つ目の成分が暴れてしまいます。

まとめると、機械的に数値計算するだけなら、特異値分解を使わなくても行列計算の組み合わせで最適化を行うことはできる。けれども、実測データがどういう情報を含んでいるかを適切に理解する時に、特異値分解の結果を参照する必要がある、ということになるでしょう。このとき、物理的な解釈との整合性をとることが必要であることは、いうまでもありません。

特異値分解を使ったスペクトルの成分解析2024/04/04(木)

Jupyter Notebook で多成分平衡を計算する」(2023/09/04)の続きです。え、半年も放置しちゃってたか。

こんな平衡があるとします。配位子Lが金属イオンに2個まで結合する、よくある平衡ですね。

錯形成定数を求めようと思って、金属イオンの溶液に配位子を少しずつ加えて、UV-vis吸収スペクトルを測定しました。いわゆるUV-vis滴定ですね。(縦軸はモル吸光係数スケールに換算してあります)

等吸収点がないため、中間体が存在する系であることがわかります。さらに、2当量を越えると過剰の配位子の吸収が重なってきます。400 nm, 620 nm, 720 nm の吸光度の変化を当量に対してプロットしてみると、1当量と2当量のところで折れ曲がっていて、主要な平衡がここで切り替わっていることがわかります。

さて、ここから平衡定数を決めたいと思います。といっても、これはなかなか厄介です。平衡定数からモル分率を計算して、「各成分のスペクトル×モル分率」の和が実測スペクトルに合うように平衡定数を最適化すればよいのですが、問題は「各成分のスペクトル」が未知であることです。Cu2+のスペクトルは配位子=0の時のスペクトルとして確定できますが、CuL2+, CuL22+のスペクトルはどうしましょうか。配位子=1当量、2当量のときのスペクトルで近似することはできますが、本来はこの「近似」も含めて最適化したいところです。

こういう時に使えるのが、特異値分解 (singular value decomposition) です。特異値分解定理については線形代数の教科書に譲りますが、ポイントは「長方形の行列で表されるデータを、より少ない成分の重ね合わせとして近似できる」ことです。

具体的に見てみましょう。今回のデータは、滴定した各「当量」に対して、それぞれ「波長」ごとの吸光度の値があります。このデータは、「波長」×「当量」という長方形の表(行列)で表されます。この行列をAとしましょう。特異値分解定理によれば、Aは次の3つの行列の積に分解できます。ここで、UとVは直交行列、Sは対角成分以外がゼロである行列です。対角成分を大きい順に並べると、Sは一意に定まります。

ここで、Sの対角成分を大きい方からn個とって、あとを全部ゼロで置き換えてしまいます。その行列をS'とします。下の図で、グレーの部分はすべてゼロになります。積 US'V を A' とすると、A' は A とは異なりますが、「ゼロで置き換えたSの成分」が十分に小さければ、その差は小さくできます。つまり、A' は A の近似データとして扱うことができます。

上の式は、下のように書き換えることができます。ここで、U'はUの左からn列だけをとったもの、V'はVの上からn行だけをとったものです。その他の部分はすべてゼロとの掛け算になるので、除いてしまっても結果に影響しません。

今回は、化学種が4つあるので n = 4 としました。行列 a の近似行列は、以下のコードで計算できます。

import numpy as np
numcomps = 4  #  Number of components
u, s, vh = np.linalg.svd(a, full_matrices=False)
u1 = u[:,0:numcomps]
s1 = s[0:numcomps]
vh1 = vh[0:numcomps,:]
a1 = u1 @ np.diag(s1) @ vh1

最初の図と同じように、図示してみます。一目では、どこが変わったのかわからないでしょう。情報量がだいぶ減ったのですが、よく近似できていることがわかります。

面白いのは実はここからです。このデータ A' が、4つの化学種 Cu2+, CuL2+, CuL22+, L のスペクトルの重ね合わせで表されるとしましょう。平衡定数 K1, K2 としてある値を仮定して、Cu2+ の初期濃度を与えれば、加えた L の当量に対して4つの化学種のモル分率を計算できます(ここで前回の方法を使うわけです)。すると、次のような式を立てることができます。P は4つの化学種のスペクトルを横に並べたもの(この段階では未知です)、Q は4つの化学種のモル分率のリストを縦に並べたものです(K1, K2を決めれば計算できます)。

A'についての2つの式を等置すると、U'SV' = PQ となります。ここで、V'の転置行列をV'Tと置くと、Vが直交行列であることから、V'V'T = I4(I4は4x4の単位行列)となります。そこで、先ほどの式の両辺に右から V'T をかけると、U'S(V'V'T) = U'S = PQV'T となります。もし4x4行列 QV'T が正則であれば、P = U'S(QV'T)-1 となります。つまり、未知だった P が一意的に決まるのです!

実際、K1 = 2e8, K2 = 3e5 と置いて(これらの値は 400 nm の吸光度変化から手計算で推測しました)、P を計算し、4つの化学種のスペクトルを求めてみました。L のスペクトルの精度が少し悪い気がしますが、有効な測定点の数が少ないのでやむを得ません。また、このとき A' = PQ となるので、それも求めてプロットしてみました。実測データをよく再現できています。

今回は K1, K2 の値を推測して1点計算しましたが、scipy.optimize.curve_fit を使って、実測値を最もよく再現できる K1, K2 を決めることもできます。特異値分解は数学的にはかなり難解ですが、このように強力な手法なので、頑張ってマスターしておきたいですね。

日本化学会第104春季年会2024/03/25(月)

日本化学会第104春季年会に参加してきました。会場は日本大学船橋キャンパス。春季年会の開催地としては馴染みが深いキャンパスですが、宿をとるのに毎回けっこう苦心しています。今回は船橋駅の近くに宿をとりました。宿泊カードを書いた時に、ご主人に「大学の方がさっきも来られたんですが、学会か何かですか?」と聞かれたので、はい日本大学で学会です、と答えたら、少し怪訝そうな顔をされました。日大船橋キャンパスの存在があまり知られてないのかな? んなことないですよね??

最近は、学会にいくと、普段あまり聞く機会のない会場を回って勉強することにしています。今回は、熱工学と高分子科学のセッションを回りました。

熱の話はいろいろ面白く、「熱力学をだますことを考えよう」(リチウムイオン電池の吉野先生の言葉だそうです)というスローガンが印象に残りました。昨年に続いて、カーボンニュートラル絡みのセッションだったので、二酸化炭素を濃縮・回収するときの熱収支の話など、自分の研究にも関わってきそうな内容がありました。あまり強い回収剤を使って濃縮すると、放出する時にエネルギーが必要になってしまいます。ある特定の過程にだけ注目するのではなくて、サイクル全体でのエネルギー収支をちゃんと考えないといけない、ということです。化学工学系の人はトータルコストを常に意識していますから、これは当たり前なんでしょうけど、私のように個別の反応への興味から化学に入ってきている人(そういう人が化学分野には多いと思う)は、つい全体のエネルギー収支のことを忘れがちなんですね。

高分子科学の方では、カネカの佐藤俊輔氏の講演がたいへん面白かったです。生分解性バイオポリマーであるポリ-3-ヒドロキシブチレート/ヘキサノエートの話だったのですが、最初に物質特許を取ったのが30年前とのこと。よく30年間も研究開発を続けたものだ、と思います。世界中の微生物をスクリーニングして、結局自社工場の敷地内から見つかった微生物が一番よかったとか、NHKの「新プロジェクトX」で紹介してほしいぐらいの話です。

あと、「化学教育フォーラム・化学用語検討小委員会の取組と学習指導要領」は、登録はしましたが時間が合わず、聴講はしませんでした。登録したので予稿集だけダウンロードしました。予稿集がかなり詳細に書かれていたので、内容はだいたい把握できました。用語の中で「気体から固体に直接状態変化すること」を「凝華」と呼ぶのが好ましい(昔は「昇華」と呼んでいた)、という話は聞いたことがありましたが、現行の高校化学基礎の教科書はすべてこの用語を採用している、とあって驚きました。確かに、手持ちの教科書を確認すると、欄外ではありますが、「気体から固体に直接変化することを凝華と呼ぶことがある」という記述が見つかります。今の教員世代はだいたい「昇華」と呼んでいると思うので、今後要注意ですね。

有機化学1のアンケート2024/02/06(火)

大学教育開発センターによるアンケートの結果が集計されてきました。今回は履修登録者84人に対して回答者13人、回答率15%と大変低くなってしまいました。何度か繰り返してアナウンスしたんですけどね……どうせ改善なんかされないだろう、と諦められているんでしょうか。毎回アンケートには真摯に対応しているつもりなんですが。

授業中に小テストや練習問題の詳しい解説が行われることで、何が違い、分かっていなかったのか分かり、その後の復習につなげられる点が良かった。

ありがとうございます。練習問題の解説を丁寧にやることは大事ですね。

小テストの時間あと1分ぐらい長くしてください。

これねえ……そもそも、小テストの得点を成績に反映させるのがよくないのかな、と思い始めているんですよ。昨日上げた試験結果の総括にも書いたんですが、小テストの目的を「点をとること」と捉えている人が一定の割合でいます。昨日参照した「理解度の確認~場面と方法(その4)~課題を提出させて」という記事から、一部引用します。

先生が丁寧に採点・添削しても、生徒が「何点もらえたか」しか気にしないことも少なくありません。先生方が手間をかけることが却って生徒から「どうして間違えたのか、どうすればより良い答案になるのか」を考える(=メタ認知を形成する)機会を奪っていることもあります。

もちろん、一番上で紹介した意見のように、ちゃんと「どうして間違えたのか」を考察している人もいるのですが、教員側としては、「そうじゃない」人に、どうやってきっかけを提供するかを考えていきたいところです。

あと、「私語に対応しているか」という質問に「そうは思わない」と回答している人がいました。私は今回の講義中はあまり私語は気にならなかったのですが、後ろの方に座っている人がごそごそやっていたのかもしれません。今後注意して見るようにします。

有機化学1の成績2024/02/05(月)

有機化学1の成績が確定しました。集計した結果を報告します。(前年度の結果はこちら

合格率は71%で、前年度から5ポイント増です。前期の有機化学基礎の合格率は83%でした。基礎→1→2と合格率が下がっていくのは毎年の傾向です。内容が複雑化していきますから、この傾向が出るのはある程度仕方がない面はあります。本当は、有機化学2の段階で合格率7割を確保したいところなのですが……

下の図は、小テストの点数と成績の間の相関です。左下から右上への対角線より上の人が多く、まあ本番頑張ったよね、ということです。これも毎年のことです。

ただ、最近、予習+復習+小テストという形式が、みなさんの負荷が大きい割に効果がイマイチ、と感じるようになってきました。特に、非常に時間をかけて予習復習をやっているわりに、点数が伸びていない人が一定数います。「時間をかけて丁寧に資料を書き写し、しっかり勉強した気分になっているが、実は内容をあまり理解していない」というパターンじゃないかなと思います。

もう一つ気になっているのは、小テストについて「何点もらえたか」にばかり目が向いている人がいることです。点数をつけることが、逆に「どうすれば良い答案になるかを考える」モチベーションを削いでいるところがあるのかもしれません。(参考:「理解度の確認~場面と方法(その4)~課題を提出させて」教育実践研究オフィスF公式ブログより)

「内容を理解しているかどうか」に自分で気づけるような仕組みを作りたいところです。そのうちアンケートの結果が来る予定なので、それも見ながら、いろいろ考えてみます。

次の記事: 「学校がウソくさい」(藤原和博著、朝日新書)
記事一覧: 2023年 2022年 2021年 2020年 2019年 2018年 2017年 2016年 2015年 2014年 2013年