分子转动光谱模拟

环上粒子模型 · 分子转动理论 · Gaussian 计算实践

第 1.2.3 节  |  Molecular Spectrum Simulation

1. 环上粒子模型(Particle-on-a-ring)

环上粒子模型(Particle-on-a-ring)是箱中粒子(Particle-in-a-box)在 环形构型下的推广,是描述分子转动量子化的最简模型。 粒子(质量 $m$)被限制在半径为 $r$ 的一维环上运动, 以方位角 $\phi$ 描述其位置。

1.1 薛定谔方程

由线性薛定谔方程出发,令 $x = r\phi$(弧长),$\phi$ 为角坐标:

$$ -\frac{\hbar^2}{2m}\frac{d^2\psi(x)}{dx^2} = E\,\psi(x) \quad\xrightarrow{\phi = x/r}\quad \boxed{-\frac{\hbar^2}{2mr^2}\frac{d^2\psi(\phi)}{d\phi^2} = E\,\psi(\phi)} $$

令 $b^2 = \dfrac{2mr^2 E}{\hbar^2}$,方程化为标准形式:

$$ \frac{d^2\psi(\phi)}{d\phi^2} = -b^2\,\psi(\phi) $$

通解为:

$$ \psi(\phi) = A\sin(b\phi) + B\cos(b\phi) $$

1.2 边界条件与量子数

环形结构要求波函数满足周期性边界条件(Periodic BC): 粒子绕环一周 $2\pi$ 后回到出发点,波函数值不变:

$$ \psi(\phi + 2\pi) = \psi(\phi) $$

这意味着波函数在整个圆周上恰好容纳整数个完整振荡(de Broglie 驻波条件), 因此 $b$ 必须为整数。令 $l = b$,得到转动量子数

$$ l = 0,\; \pm1,\; \pm2,\; \pm3,\; \ldots $$
ℹ️
与箱中粒子的关键区别
箱中粒子采用自然边界条件($\psi(0)=\psi(L)=0$),最小量子数 $n=1$, 零点能 $E_1 > 0$。
环上粒子采用周期性边界条件,$l=0$ 允许,零点能 $E_0 = 0$。

1.3 能级与波函数

将 $l$ 代入能量表达式,得到能级公式

$$ E_l = \frac{\hbar^2 l^2}{2mr^2}, \qquad l = 0,\;\pm1,\;\pm2,\;\ldots $$

其特征:

归一化波函数(取实数形式):

$$ \psi_l(\phi) = \frac{1}{\sqrt{2\pi}}\sin(l\phi + \delta), \qquad \int_0^{2\pi}|\psi_l(\phi)|^2\,d\phi = 1 $$

$\delta$ 为相位常数。取复数形式更常用: $\psi_l(\phi) = \dfrac{1}{\sqrt{2\pi}}e^{il\phi}$。

💡
物理图像:$l=8$ 的波函数沿圆周正好有 8 个完整波, 正值区域在环外侧,负值区域在环内侧。

1.4 与箱中粒子的对比

箱中粒子(1D Box) 环上粒子(Ring)
坐标$x \in [0, L]$$\phi \in [0, 2\pi)$
边界条件自然 BC:$\psi(0)=\psi(L)=0$周期 BC:$\psi(\phi+2\pi)=\psi(\phi)$
量子数$n = 1,2,3,\ldots$$l = 0,\pm1,\pm2,\ldots$
能级$E_n = \dfrac{\hbar^2\pi^2 n^2}{2mL^2}$$E_l = \dfrac{\hbar^2 l^2}{2mr^2}$
波函数$\psi_n = \sqrt{\dfrac{2}{L}}\sin\!\dfrac{n\pi x}{L}$$\psi_l = \dfrac{1}{\sqrt{2\pi}}\sin(l\phi+\delta)$
零点能$E_1 > 0$($n \geq 1$)$E_0 = 0$($l = 0$ 允许)
简并无简并$l \neq 0$ 二重简并
应用共轭线性分子、纳米量子点共轭环形分子(苯等)、分子转动能级

2. 固态物理拓展——Born–von Kármán 边界条件

固态物理 声子 Phonon

1912 年,Born 和 von Kármán 在论文《关于空间点阵的振动》中提出了 Born–von Kármán 周期性边界条件: 对长度为 $L$ 的晶体,令 $\psi(x+L) = \psi(x)$, 使允许的波矢量离散化:

$$ k = \frac{2\pi n}{L}, \qquad n = 0,\;\pm1,\;\pm2,\;\ldots $$

这与环上粒子的周期性边界条件在数学上完全等价: 将线性晶格首尾相连成"大环"。 这一边界条件是固态物理中声子、电子能带理论的基础。

3. 分子转动的角动量理论

3.1 角动量与惯量张量

对由 $N$ 个原子组成的分子,第 $k$ 个原子的角动量贡献为:

$$ \vec{L}_k = \vec{r}_k \times \vec{p}_k = m_k\,\vec{r}_k \times \vec{v}_k $$

对刚性分子,整体以角速度 $\boldsymbol{\omega}$ 转动时, 各原子速度为 $\vec{v}_k = \boldsymbol{\omega}\times\vec{r}_k$, 总角动量为:

$$ \vec{L} = \sum_k m_k\,\vec{r}_k \times (\boldsymbol{\omega}\times\vec{r}_k) = \mathbf{I}\,\boldsymbol{\omega} $$

其中 $\mathbf{I}$ 为惯量矩阵(Inertial Matrix),$3\times3$ 对称矩阵:

$$ \mathbf{I} = \begin{pmatrix} I_{xx} & I_{xy} & I_{xz} \\ I_{yx} & I_{yy} & I_{yz} \\ I_{zx} & I_{zy} & I_{zz} \end{pmatrix} $$

对角元素(转动惯量 Moments of Inertia)

$$ I_{xx} = \sum_k m_k(y_k^2 + z_k^2), \quad I_{yy} = \sum_k m_k(x_k^2 + z_k^2), \quad I_{zz} = \sum_k m_k(x_k^2 + y_k^2) $$

非对角元素(惯量积 Products of Inertia)

$$ I_{xy} = I_{yx} = -\sum_k m_k x_k y_k, \quad I_{xz} = I_{zx} = -\sum_k m_k x_k z_k, \quad I_{yz} = I_{zy} = -\sum_k m_k y_k z_k $$
ℹ️
计算前需将坐标系原点移至质心(Center of Mass): $$\vec{r}_{\rm cm} = \frac{\sum_k m_k \vec{r}_k}{\sum_k m_k}$$ 令 $\vec{r}_k' = \vec{r}_k - \vec{r}_{\rm cm}$,再代入惯量公式。

3.1b 惯量积的物理意义

惯量矩阵的非对角元 $I_{\alpha\beta}$($\alpha \neq \beta$)称为 惯量积(Products of Inertia),定义为:

$$ I_{\alpha\beta} = -\sum_k m_k\, r_{k\alpha}\, r_{k\beta} \qquad (\alpha \neq \beta) $$

以 $I_{xy}$ 为例:若分子中有质量偏向 $x > 0,\, y > 0$ 和 $x < 0,\, y < 0$ 两个象限,则 $\sum_k m_k x_k y_k > 0$,$I_{xy} < 0$,惯量积非零。

惯量积的物理含义

惯量积反映质量分布相对于坐标轴的非对称性。 其物理后果是:当分子绕某坐标轴转动时,如果惯量积不为零, 产生的角动量方向会偏离转动轴

$$ \vec{L} = \mathbf{I}\,\boldsymbol{\omega} \;\Longrightarrow\; L_x = I_{xx}\omega_x + I_{xy}\omega_y + I_{xz}\omega_z $$

例如,若仅有 $\omega_z \neq 0$,但 $I_{xz} \neq 0$,则 $L_x = I_{xz}\omega_z \neq 0$—— 角动量在 $x$ 方向出现分量,导致转动轴"进动",这正是陀螺偏转的根源。

何时惯量积为零?

若分子对某坐标平面具有对称性,则惯量积自动消失:

对称条件为零的惯量积例子
质量分布关于 $xz$ 平面对称 $I_{xy} = I_{yz} = 0$ H₂O(分子平面为 $xz$)
质量分布关于 $yz$ 平面对称 $I_{xy} = I_{xz} = 0$
坐标轴恰为惯量主轴 全部 $I_{\alpha\beta} = 0$ 任意分子,在主轴系中

只有当坐标轴方向恰好对应惯量主轴时,惯量矩阵才变为对角矩阵, 此时转动轴与角动量轴重合,运动最简单。 这就是需要将分子坐标变换到惯性主轴坐标系的动机。

3.1c 变换到惯性主轴坐标系

对任意初始坐标下的分子,通过以下两步变换,可将坐标系转化为 惯性主轴坐标系(Principal Axis System, PAS): 质心在原点,三个坐标轴分别指向惯量主轴, 且沿 $x$、$y$、$z$ 方向的转动惯量依次增大($I_x \leq I_y \leq I_z$)。

第一步:平移——将质心移至原点

计算分子的质心坐标:

$$ \vec{r}_{\rm cm} = \frac{\displaystyle\sum_k m_k\,\vec{r}_k}{\displaystyle\sum_k m_k} = \frac{1}{M}\sum_k m_k\,\vec{r}_k $$

对所有原子做平移:

$$ \vec{r}_k' = \vec{r}_k - \vec{r}_{\rm cm} $$

平移后,$\sum_k m_k \vec{r}_k' = \vec{0}$,质心在新坐标原点。 此时用 $\vec{r}_k'$ 代入惯量公式,计算得到质心系惯量矩阵 $\mathbf{I}'$。

第二步:旋转——将坐标轴转到惯量主轴方向

对质心系惯量矩阵 $\mathbf{I}'$(实对称矩阵)求解本征值问题

$$ \mathbf{I}'\,\mathbf{n}_i = I_i\,\mathbf{n}_i, \qquad i = 1, 2, 3 $$

得到三个本征值 $I_1 \leq I_2 \leq I_3$(即主转动惯量) 和对应的单位本征向量 $\mathbf{n}_1,\,\mathbf{n}_2,\,\mathbf{n}_3$(即主轴方向)。 由于 $\mathbf{I}'$ 是实对称矩阵,三个本征向量两两正交: $\mathbf{n}_i \cdot \mathbf{n}_j = \delta_{ij}$。

构造旋转矩阵 $\mathbf{R}$,以本征向量为行:

$$ \mathbf{R} = \begin{pmatrix} \leftarrow \mathbf{n}_1^{\rm T} \rightarrow \\ \leftarrow \mathbf{n}_2^{\rm T} \rightarrow \\ \leftarrow \mathbf{n}_3^{\rm T} \rightarrow \end{pmatrix} \qquad (\mathbf{R}^{\rm T} = \mathbf{R}^{-1},\;\text{正交矩阵}) $$

对每个原子施加旋转变换:

$$ \vec{r}_k'' = \mathbf{R}\,\vec{r}_k' $$

此时惯量矩阵变为对角形式:

$$ \mathbf{R}\,\mathbf{I}'\,\mathbf{R}^{\rm T} = \begin{pmatrix} I_1 & 0 & 0 \\ 0 & I_2 & 0 \\ 0 & 0 & I_3 \end{pmatrix} = \mathbf{I}'' $$

变换结果:惯性主轴坐标系的性质

坐标轴主轴方向主转动惯量对应转动常数
$x$(新) $\mathbf{n}_1$(最小惯量方向) $I_x = I_A$(最小) $A = h/(8\pi^2 I_A)$(最大)
$y$(新) $\mathbf{n}_2$(中间) $I_y = I_B$(中间) $B = h/(8\pi^2 I_B)$
$z$(新) $\mathbf{n}_3$(最大惯量方向) $I_z = I_C$(最大) $C = h/(8\pi^2 I_C)$(最小)

约定:$I_x \leq I_y \leq I_z$,对应转动常数 $A \geq B \geq C$(GHz)。 Gaussian 输出的三个转动常数即按此顺序排列。

💡
验证:对角化后惯量积全为零
变换后 $\mathbf{I}''$ 的非对角元均为零,可以验证: $$ I_{xy}'' = -\sum_k m_k\,x_k''\,y_k'' = -\sum_k m_k\,(\mathbf{R}\vec{r}_k')_x\,(\mathbf{R}\vec{r}_k')_y = 0 $$ 这等价于:在新坐标系中,质量分布相对于每对坐标平面均呈对称分布。

数值实现(Python 示例)

import numpy as np

def to_principal_axis_system(coords, masses):
    """
    coords : (N, 3) array,原始笛卡尔坐标(Å)
    masses : (N,)   array,原子质量(amu)
    返回:新坐标 coords_pas,主转动惯量 [Ix, Iy, Iz](amu·Å²)
    """
    M = masses.sum()

    # Step 1: 平移到质心
    r_cm = (masses[:, None] * coords).sum(axis=0) / M
    coords_cm = coords - r_cm

    # Step 2: 构建惯量矩阵
    I = np.zeros((3, 3))
    for m, r in zip(masses, coords_cm):
        I += m * (np.dot(r, r) * np.eye(3) - np.outer(r, r))

    # Step 3: 对角化,取得本征值(主转动惯量)和本征向量(主轴)
    eigenvalues, eigenvectors = np.linalg.eigh(I)
    # eigenvalues 已按升序排列:Ix ≤ Iy ≤ Iz
    # eigenvectors 的列为本征向量

    # Step 4: 旋转矩阵(本征向量转置 = 行为主轴方向)
    R = eigenvectors.T          # shape (3, 3)

    # Step 5: 变换坐标
    coords_pas = coords_cm @ eigenvectors  # 等价于 (R @ coords_cm.T).T

    return coords_pas, eigenvalues  # eigenvalues = [Ix, Iy, Iz]

3.2 转动动能

$$ T = \frac{1}{2}\boldsymbol{\omega}^{\rm T}\,\mathbf{I}\,\boldsymbol{\omega} = \frac{1}{2}\sum_{\alpha,\beta}\omega_\alpha\,I_{\alpha\beta}\,\omega_\beta $$

对惯量矩阵进行对角化(选取主轴坐标系), 可使所有非对角元为零,得到三个主转动惯量 $I_A \leq I_B \leq I_C$:

$$ T = \frac{1}{2}\bigl(I_A\,\omega_A^2 + I_B\,\omega_B^2 + I_C\,\omega_C^2\bigr) $$

对角化等价于将分子(或坐标轴)旋转至惯量主轴方向, 这一变换通过求惯量矩阵的本征向量来实现。

3.3 转动常数(Rotational Constants)

转动能级

对线性分子(或一般分子沿某一主轴 $B$), 将转动动能用角动量量子数 $J$ 表达,得到量子化的转动能级

$$ E_J = \frac{\hbar^2}{2I_B}\,J(J+1), \quad J = 0,1,2,\ldots $$

相邻能级之间的跃迁能量($J \to J+1$)为:

$$ \Delta E_J = E_{J+1} - E_J = \frac{\hbar^2}{2I_B}\,2(J+1) = \frac{\hbar^2}{I_B}(J+1) $$

由能量到频率——转动常数的来历

光谱实验中观测到的是电磁波的频率而非能量。 根据 de Broglie(普朗克-爱因斯坦)关系 $E = h\nu$, 将转动能量直接除以普朗克常数 $h$,即得到对应的频率

$$ \nu = \frac{E}{h} = \frac{\hbar^2}{2I_B h}\,J(J+1) = \frac{h}{8\pi^2 I_B}\,J(J+1) $$

将其中与 $J$ 无关的常数部分单独提出,定义为转动常数 $B$:

$$ \boxed{B = \frac{h}{8\pi^2 I_B}} \qquad\text{(单位:Hz)} $$

于是转动能级对应的频率简洁地写为:

$$ \nu_J = B\cdot J(J+1) $$

类似地,对三个主轴各定义一个转动常数:

$$ A = \frac{h}{8\pi^2 I_A}, \quad B = \frac{h}{8\pi^2 I_B}, \quad C = \frac{h}{8\pi^2 I_C} $$
ℹ️
Gaussian 输出中的 Rotational constants (GHZ) 就是上述 $A$、$B$、$C$ 的数值,单位换算为 GHz(即 $10^9$ Hz): $$B[\text{GHz}] = \frac{h[\text{J·s}]}{8\pi^2\,I_B[\text{kg·m}^2]} \times 10^{-9}$$ 它直接给出了分子转动跃迁所对应的微波/毫米波频率数值, 可与微波光谱实验数据直接比较。

也可转换为波数(cm⁻¹)表示,即用光速 $c$ 除以频率:

$$ \tilde{B} = \frac{B}{c} = \frac{h}{8\pi^2 I_B c} \qquad\text{(cm⁻¹)} $$
分子类型条件转动常数示例
线性分子 $I_A = 0,\; I_B = I_C$ 一个 $B$ H₂, HCl, CO₂
球陀螺(Spherical top) $I_A = I_B = I_C$ 一个 $B$ CH₄, SF₆
对称陀螺(Symmetric top) $I_A \neq I_B = I_C$ 或
$I_A = I_B \neq I_C$
两个 $A, B$ NH₃, C₆H₆
不对称陀螺(Asymmetric top) $I_A \neq I_B \neq I_C$ 三个 $A, B, C$ H₂O

4. 用 Gaussian 计算转动常数

Gaussian 是量子化学领域最广泛使用的计算软件。 通过几何优化或单点计算,Gaussian 会自动输出分子的转动常数。

4.1 Gaussian 输入文件格式

Gaussian 输入文件(.gjf.com)的基本结构:

%chk=filename.chk          ← 检查点文件(可选,用于后续读取)
%mem=2GB                   ← 内存(可选)
%nprocshared=4             ← 处理器数(可选)
#p <方法>/<基组> <关键词>   ← 路由段(Route section)

分子标题(任意文字)        ← 空行分隔

电荷  自旋多重度            ← 如 0 1 = 中性单重态
元素符号  X  Y  Z          ← 原子坐标(Å)
...
                           ← 末尾空行(必须!)
⚠️
输入文件末尾必须有至少一个空行,否则 Gaussian 会报错退出。

常用计算方法与基组

方法描述精度/速度
HFHartree–Fock,最基础的从头计算快,精度较低
B3LYP最常用的 DFT 泛函平衡
MP2二阶 Møller–Plesset 微扰较高,较慢
CCSD(T)耦合簇,"金标准"高,很慢
6-31G双 zeta 基组小分子常用
6-311+G(d,p)三 zeta + 弥散 + 极化中等精度
def2-TZVPAhlrichs 三 zeta 极化基组推荐用于几何优化

获取转动常数的关键词

单点能计算(#p hf/6-31g)默认输出转动常数。 若需几何优化后给出,使用:

#p b3lyp/6-311+g(d,p) opt freq

opt:优化几何构型; freq:计算振动频率(同时输出零点能和更精确的转动常数)。

4.2 示例一:H₂ 分子转动常数

输入文件

%chk=H2.chk
#p hf/6-31g

H2

0 1
 H  0.0  0.0  0.3
 H  0.0  0.0 -0.3

参数说明:

  • 电荷 0,自旋多重度 1(单重态,两个电子自旋配对)
  • H₂ 键长约 0.74 Å,两个 H 原子位于 $z$ 轴上,各距原点 0.3 Å
  • 分子沿 $z$ 轴排列,故 $z$ 轴为对称轴($I_z = 0$)

Gaussian 输出结果

Rotational constants (GHZ):
   0.0000000        2785.8616915        2785.8616915
AtmWgt=  1.0078250  1.0078250

结果解读

H₂ 是线性分子,分子轴($z$ 轴)方向的转动惯量 $I_A = 0$, 对应转动常数 $A = 0$(无法绕对称轴转动)。

垂直轴($x$ 和 $y$ 方向):$B = C = 2785.86$ GHz

手动验证:

$$ I_B = \sum_k m_k r_{k,\perp}^2 = 2 \times m_H \times (0.3\,\text{Å})^2 = 2 \times 1.6736\times10^{-27}\,\text{kg} \times (3\times10^{-11}\,\text{m})^2 $$ $$ B = \frac{h}{8\pi^2 I_B} = \frac{6.626\times10^{-34}}{8\pi^2 \times I_B} \approx 2786\,\text{GHz} $$

与 Gaussian 输出一致。

⚠️
思考题:单原子和双原子分子的转动常数有何不同? 为什么 H₂ 的 $A = 0$? 若将两个 H 原子放在不同轴上,结果会如何变化?

4.3 示例二:H₂O 分子转动常数

输入文件

%chk=H2O.chk
#p hf/6-31g

H2O

0 1
 O  0.0   0.00000000  -0.11081188
 H  0.0  -0.78397589   0.44324751
 H  0.0   0.78397589   0.44324751

坐标说明:

  • O 原子位于坐标原点附近,沿 $z$ 方向略微偏移
  • 两个 H 原子关于 $xz$ 平面对称($y$ 坐标绝对值相等,符号相反)
  • H–O–H 键角约 104.5°,是典型不对称陀螺(三个不同的转动常数)

Gaussian 输出结果

Rotational constants (GHZ):
   919.6759406      407.9403341      282.5913764
AtmWgt=  15.9949146   1.0078250   1.0078250

结果解读

H₂O 是不对称陀螺,三个主转动惯量均不相同,对应三个转动常数:

常数值(GHz)对应轴
$A$919.676最小惯量轴(分子平面内,平分 H–O–H 角)
$B$407.940中间惯量轴
$C$282.591最大惯量轴(垂直分子平面)

转动常数之间满足:$A > B > C$(对应 $I_A < I_B < I_C$)。

4.4 Gaussian 输出文件关键信息

在 Gaussian 日志文件(.log)中,搜索以下关键词:

关键词含义
Rotational constants转动常数(GHz 或 cm⁻¹)
AtmWgt各原子质量(amu)
Standard orientation转换到标准(质心)坐标系后的原子坐标
Principal axis主轴方向(本征向量)
Eigenvalues主转动惯量(amu·Ų)
Zero-point correction零点能修正(需 freq 关键词)
Normal termination计算正常完成
💡
提示:使用 grep "Rotational constants" *.log 可以快速从日志文件中提取转动常数。 GaussView 图形界面也可直接查看这些结果。

5. 编程作业:任意分子转动常数计算

从 Gaussian 日志文件中读取原子坐标,手动计算惯量矩阵并求转动常数, 与 Gaussian 输出验证。

  1. 从 Gaussian 日志读取原子坐标
    .log 文件中找到 Standard orientation: 段落, 提取原子序号、原子类型、$x,y,z$ 坐标(Å)及原子质量(AtmWgt)。
    import re
    
    def read_gaussian_log(filename):
        atoms = []
        with open(filename) as f:
            lines = f.readlines()
        # 找 Standard orientation 块
        for i, line in enumerate(lines):
            if "Standard orientation" in line:
                start = i + 5
                for j in range(start, len(lines)):
                    if "---" in lines[j]:
                        break
                    parts = lines[j].split()
                    if len(parts) == 6:
                        atoms.append({
                            'Z': int(parts[1]),
                            'x': float(parts[3]),
                            'y': float(parts[4]),
                            'z': float(parts[5])
                        })
        return atoms
    
  2. 平移坐标原点到质心
    计算质心坐标,将所有原子坐标减去质心: $$ \vec{r}_{\rm cm} = \frac{\sum_k m_k\,\vec{r}_k}{\sum_k m_k}, \qquad \vec{r}_k' = \vec{r}_k - \vec{r}_{\rm cm} $$
    import numpy as np
    
    def to_center_of_mass(atoms, masses):
        coords = np.array([[a['x'], a['y'], a['z']] for a in atoms])
        m = np.array(masses)
        r_cm = np.sum(m[:, None] * coords, axis=0) / np.sum(m)
        return coords - r_cm
    
  3. 构建惯量矩阵并对角化(转到主轴系)
    $$ I_{\alpha\beta} = \sum_k m_k\bigl(|\vec{r}_k'|^2\delta_{\alpha\beta} - r_{k\alpha}' r_{k\beta}'\bigr) $$
    def inertia_tensor(coords, masses):
        I = np.zeros((3, 3))
        for m, r in zip(masses, coords):
            r2 = np.dot(r, r)
            I += m * (r2 * np.eye(3) - np.outer(r, r))
        return I
    
    # 对角化得主转动惯量
    eigenvalues, eigenvectors = np.linalg.eigh(I)
    # eigenvalues 即 I_A, I_B, I_C(amu·Å²,需换算 SI 单位)
    
  4. 计算转动常数
    $$ B = \frac{h}{8\pi^2 I_B} \quad\text{(Hz)} \qquad B[\text{GHz}] = \frac{h[\text{J·s}]}{8\pi^2\,I_B[\text{kg·m}^2]} \times 10^{-9} $$
    h  = 6.62607015e-34   # J·s
    amu_to_kg = 1.66053906660e-27
    A_to_m    = 1e-10
    
    def rotational_constants_GHz(I_eigenvalues_amu_A2):
        consts = []
        for I in I_eigenvalues_amu_A2:
            if I < 1e-10:
                consts.append(0.0)
            else:
                I_SI = I * amu_to_kg * A_to_m**2
                B = h / (8 * np.pi**2 * I_SI) * 1e-9  # GHz
                consts.append(B)
        return sorted(consts, reverse=True)  # A >= B >= C
    
💡
验证方法:将计算结果与 Gaussian 日志中的 Rotational constants (GHZ) 对比,误差应在 0.01% 以内。 若偏差较大,检查:(1) 质心平移是否正确;(2) 单位换算(amu, Å → kg, m); (3) 惯量矩阵是否使用了质心系坐标。
ℹ️
坐标变换的证明:将分子旋转到主轴坐标系等价于对惯量矩阵 做正交相似变换 $\mathbf{I}' = \mathbf{R}^{\rm T}\mathbf{I}\mathbf{R}$, 其中 $\mathbf{R}$ 由本征向量组成。可以证明,该变换使得 $\text{tr}(\mathbf{I})$ 守恒,且 $\det(\mathbf{I})$ 不变。

核心公式总览

物理量公式备注
环上粒子能级 $E_l = \dfrac{\hbar^2 l^2}{2mr^2}$ $l = 0, \pm1, \pm2, \ldots$
环上粒子波函数 $\psi_l = \dfrac{1}{\sqrt{2\pi}}e^{il\phi}$ 复数形式
惯量矩阵对角元 $I_{zz} = \sum_k m_k(x_k^2+y_k^2)$ 需质心系坐标
角动量 $\vec{L} = \mathbf{I}\,\boldsymbol{\omega}$ 矩阵形式
转动常数 $B = \dfrac{h}{8\pi^2 I_B}$ 单位 Hz(/c → cm⁻¹)
线性分子转动能 $E_J = hcBJ(J+1)$ $J = 0,1,2,\ldots$