last_modified: 2026-01-07
生成AIによる自動生成記事に関する免責事項: 本記事は、物理学の標準的な教科書および計算化学の理論に基づき、大規模言語モデル(生成AI)によって作成された解説記事です。数式の導出や歴史的経緯の記述においては、学術的な正確性を期しておりますが、学習や研究への応用にあたっては、必ず標準的な教科書を参照してください。
1. 序論:計算化学の「ルールブック」
前回の記事では「箱の中の粒子」モデルを通じて、シュレーディンガー方程式から量子化が自然に導かれることを見ました。今回は視座を少し上げ、量子力学という体系全体を支える**「仮説(Postulates、公理)」**について考えます。
これらは証明される定理ではなく、「これらを認めれば微視的自然界を矛盾なく説明できる」という論理的出発点です。一見抽象的な数学的定義に見えますが、実は私たちが普段行っている構造最適化やスペクトル計算の裏側で常に動いている「計算化学の文法」そのものです。本稿では、実務上の注意点(Koopmansの定理やスピン汚染など)を含め、より厳密な視点で解説します。
2. 第1仮説:状態と波動関数
仮説の定義
「系の物理的状態は、その系の波動関数 によって完全に決定される」
厳密な補足と計算化学への接続
「完全に決定される」とは、 が系に関するすべての情報を含んでいることを意味します。ただし、波動関数には定数倍(特に位相因子 )の不定性があり、物理的に観測可能なのは確率密度 です。
計算化学(特に波動関数理論)において、私たちが求めているのは**「エネルギー汎関数を最小にする最適な (変分法)」**です。 一方、DFT(密度汎関数理論)はHohenberg-Kohn定理により、「基底状態の物理量は電子密度 によって一意に決定される」という別の枠組みに立脚していますが、 を構成するためにKohn-Sham軌道という「仮想的な波動関数」を導入するため、実務上の取り扱いは波動関数理論と共通しています。
3. 第2・3仮説:演算子と固有値
仮説の定義
「古典力学の物理量(観測量)は、量子力学では線形エルミート演算子に対応する」 「ある物理量の個々の測定値は、その演算子の固有値のいずれかでなければならない」
状態が固有関数 そのものである場合、測定値は で確定します。そうでない場合(重ね合わせの状態)は、期待値 が観測の平均値となります。
計算化学への接続:軌道エネルギーの解釈
計算化学のログファイルに出力される「軌道エネルギー 」は、Fock演算子(またはKohn-Sham演算子)の固有値です。
- Hartree-Fock法: Koopmansの定理により、占有軌道のエネルギー は、その電子を取り去るのに必要なエネルギー(イオン化ポテンシャル)の近似値として解釈できます()。ただし、これには「電子を取り去っても他の軌道は緩和しない(凍結近似)」という仮定が含まれます。
- DFT: Kohn-Sham軌道エネルギーの物理的意味は、最高被占軌道(HOMO)を除いて厳密には定義されていません。HOMOのエネルギーのみが、厳密なイオン化ポテンシャルに対応することが証明されています(Janakの定理)。
4. 第4仮説:固有関数の直交性
仮説の定義
「エルミート演算子の異なる固有値に属する固有関数は、互いに直交する」
計算化学への接続:重なり行列 の正体
計算化学では、分子軌道(MO)を原子軌道(AO, 基底関数)の線形結合(LCAO)で表します。 ここで重要なのは、**「原子軌道(AO)は分子ハミルトニアンの固有関数ではない」**という点です。そのため、異なる原子にあるAO同士は直交しておらず、重なり積分 は0になりません。
Roothaan方程式 において、右辺に重なり行列 が現れるのはこのためです。計算の内部では、Löwdinの直交化などを用いて直交基底へ変換し、正しい固有値問題を解く手続きが行われています。
5. 第5仮説:時間依存性とTD-DFT
仮説の定義
「波動関数の時間発展は、時間依存シュレーディンガー方程式(TDSE)に従う」
計算化学への接続:励起状態と線形応答
通常の構造最適化は定常状態(時間変化なし)を扱いますが、光吸収などの励起プロセスは本質的に動的です。
- TD-DFT (Time-Dependent DFT): 多くのプログラムに実装されているTD-DFTは、TDSEを直接時間発展させて解く(Real-time TDDFT)のではなく、通常は線形応答理論に基づいています。「外部電場(光)による微小な摂動に対して、電子密度がどう応答するか」を振動数領域で解くことで、励起エネルギーや振動子強度を算出します。 これにより、時間を陽に含まない計算コストで、動的な性質であるスペクトルを得ることが可能になっています。
6. 第6仮説:交換関係と同時測定
仮説の定義
「2つの演算子 が可換である()とき、それらは同時固有関数を持ち、物理量は同時に確定できる」
計算化学への接続:UHF法とスピン汚染の論理的関係
この仮説は、計算結果の「正しさ」を判定する重要な指針となります。
非相対論的なハミルトニアン は、全スピン二乗演算子 と可換です()。 この可換性が意味するのは、**「系のエネルギーが確定している状態(の固有状態)ならば、そのスピン状態(の固有値)も同時に確定していなければならない(純粋な一重項や二重項でなければならない)」**という厳格なルールです。
なぜUHFで「汚染」が起きるのか?
しかし、実際の計算(特にUHF法)では、このルールが近似によって破られることがあります。
- エネルギーの追求: UHF法は、変分原理に基づき「とにかくエネルギー(の期待値)を低くする」ことを最優先します。
- 制限の解除: その際、エネルギーを下げる自由度を得るために、「スピン状態が純粋でなければならない(の固有関数でなければならない)」という制約(Restricted)を外します。
- 結果(スピン汚染): その結果、得られた波動関数は、エネルギー的には安定ですが、スピンに関しては「二重項に四重項が混ざった状態」のような混合物になります。
これがスピン汚染 (Spin Contamination) です。 第6仮説に照らせば、可換なはずの と が同時確定していない(スピンが確定していない)ということは、**「得られた波動関数は、ハミルトニアンの厳密な固有関数ではなく、あくまで近似解である」**という動かぬ証拠となります。これは「計算が失敗している」という意味ではなく、 対称性よりもエネルギー最小化を優先した近似解を採用している という意味です。
実務的には、出力された の値(例:二重項なら0.75になるはず)を確認し、この「対称性の破れ」が許容範囲内かどうかを判断することが重要です。
7. Pythonによる概念確認:直交性と交換関係
ここでは、1次元の箱の中の粒子の厳密解を用いて、固有関数の直交性と、位置・運動量の非可換性を数値的に確認します。 ※以下のコードは解析的な性質を数値積分で確認するものであり、数値計算誤差を含む点に留意してください。
import numpy as np
from scipy import integrate
class QuantumPostulatesDemo:
def __init__(self, L=1.0):
self.L = L
self.hbar = 1.0
def psi(self, n, x):
"""正規化された波動関数"""
if 0 <= x <= self.L:
return np.sqrt(2/self.L) * np.sin(n * np.pi * x / self.L)
else:
return 0.0
def check_orthogonality(self, n, m):
"""第4仮説: 直交性の数値積分"""
x_range = np.linspace(0, self.L, 2000) # 精度のため点数を多めに
y_prod = [self.psi(n, x) * self.psi(m, x) for x in x_range]
integral = integrate.simps(y_prod, x_range)
return integral
def check_commutator_expectation(self, n):
"""
第6仮説: [x, p] = i*hbar の期待値確認
<n| [x,p] |n> = <n|xp|n> - <n|px|n> = i*hbar <n|n> = i*hbar
となることを、解析的な微分操作と数値積分で確認します。
p = -i*hbar * d/dx
"""
x_range = np.linspace(0, self.L, 2000)
dx = x_range[1] - x_range[0]
# 波動関数とその1階導関数
psi_vals = np.array([self.psi(n, x) for x in x_range])
# 解析微分: d/dx sin(kx) = k cos(kx)
k = n * np.pi / self.L
d_psi_vals = np.array([np.sqrt(2/self.L) * k * np.cos(k*x) if 0<=x<=self.L else 0 for x in x_range])
# x * p |Psi> = x * (-i hbar) * dPsi/dx
xp_psi = -1j * self.hbar * x_range * d_psi_vals
# p * x |Psi> = -i hbar * d/dx (x * Psi) = -i hbar (Psi + x * dPsi/dx)
px_psi = -1j * self.hbar * (psi_vals + x_range * d_psi_vals)
# Commutator applied to Psi: [x, p]Psi = (xp - px)Psi
# = -1j*hbar*x*dPsi - (-1j*hbar*Psi - 1j*hbar*x*dPsi)
# = i*hbar*Psi
comm_psi = xp_psi - px_psi
# 期待値 <Psi | [x,p] | Psi>
expectation = integrate.simps(np.conj(psi_vals) * comm_psi, x_range)
return expectation
if __name__ == "__main__":
demo = QuantumPostulatesDemo(L=1.0)
print("--- 1. 直交性の確認 (Orthogonality) ---")
print(f"<1|1> = {demo.check_orthogonality(1, 1):.5f} (Normalization)")
print(f"<1|2> = {demo.check_orthogonality(1, 2):.5f} (Orthogonal, expected 0.0)")
print("\n--- 2. 交換関係の期待値 (Commutator) ---")
val = demo.check_commutator_expectation(1)
print(f"<1| [x, p] |1> = {val:.5f}")
print(f"Theoretical value = {1j * demo.hbar:.5f}")
print("※位置と運動量は可換ではないため、不確定性関係が生じます。")
8. 結論
量子力学の公理は、計算化学ソフトウェアが正常に動作するための「数学的保証」です。
- SCF収束の背後には: 基底関数の適切な処理(重なり行列 )と変分原理があります。
- 計算結果の解釈には: Koopmansの定理やDFTの適用限界といった理論的背景の理解が不可欠です。
- トラブルシューティングには: スピン汚染のような「演算子の可換性」に関わる対称性の知識が役立ちます。
「なぜ計算が合わないのか?」と悩んだとき、これら基礎的な仮説に立ち返ることで、問題の本質(モデルの限界なのか、設定のミスなのか)が見えてくるはずです。
参考文献
- Szabo, A., & Ostlund, N. S. “Modern Quantum Chemistry,” Dover Publications.
- Parr, R. G., & Yang, W. “Density-Functional Theory of Atoms and Molecules,” Oxford University Press.