$\pi$電子を提供する炭素原子の数を$N$とする.
(例: エチレン $\rm C_2H_4$は$N=2$, ブタジエン $\rm C_4H_6$は$N=4$, ベンゼン $\rm C_6H_6$は$N=6$)
ハミルトニアン行列 $H$ は $N \times N$ 対称行列
$H$ の固有ベクトルが分子軌道係数, 固有値が分子軌道エネルギーを与える.($\beta < 0$に注意)
例1: エチレン $H = \begin{pmatrix} \alpha & \beta \\ \beta & \alpha \end{pmatrix}$
$E_1 = \alpha + \beta, \quad \psi_1 = \frac{1}{\sqrt{2}}(\phi_1 + \phi_2)$
$E_2 = \alpha - \beta, \quad \psi_2 = \frac{1}{\sqrt{2}}(\phi_1 - \phi_2)$
例2: アリルカチオン $H = \begin{pmatrix} \alpha & \beta & 0 \\ \beta & \alpha & \beta \\ 0 & \beta & \alpha \end{pmatrix}$
$E_1 = \alpha + \sqrt{2} \beta, \quad \psi_1 = \frac{1}{2}(\phi_1 + \sqrt{2} \phi_2 + \phi_3)$
$E_2 = \alpha, \quad \psi_2 = \frac{1}{\sqrt{2}}(\phi_1 - \phi_3)$
$E_3 = \alpha - \sqrt{2} \beta, \quad \psi_3 = \frac{1}{2}(\phi_1 - \sqrt{2} \phi_2 + \phi_3)$
from sympy.abc import a, b # a, b は通常の変数ではなくシンボルとする
from sympy import Matrix, pprint, simplify
H = Matrix([ # 行列の入力
[a, b],
[b, a]]) # 複数行に書いてもよい
pprint(H) # sympy の pretty print
pprint(H.eigenvals())
pprint(H.eigenvects())
以下に示されるように, 非常に長い出力になってしまう.
H = Matrix([
[a,b,0,0],
[b,a,b,0],
[0,b,a,b],
[0,0,b,a]
])
pprint(H)
pprint(H.eigenvals())
pprint(H.eigenvects())
v = H.eigenvects()
for i in range(len(v)):
print('Eigenvalue')
pprint(v[i][0])
print('Eigenvector')
for j in range(v[i][1]):
pprint(simplify(v[i][2][j]).transpose())
ブタジエンとの違いに注目
H = Matrix([
[a,b,0,b],
[b,a,b,0],
[0,b,a,b],
[b,0,b,a]
])
pprint(H)
pprint(H.eigenvals())
pprint(H.eigenvects())