跳轉到

1995 計算化學#

案發現場#

到了二十世紀末,化學的理論工具已經齊備:量子力學(見 1913-Bohr原子模型.md、1927-HeitlerLondon氫分子.md)、價鍵與雜化軌域(見 1931-Pauling價鍵理論.md)、密度泛函理論(見 1964-密度泛函理論.md)。但案發現場的最後一關是:理論與實驗之間的「翻譯」問題。

化學家想在電腦上「做實驗」——預測分子的性質、模擬反應、設計藥物——但面對兩道牆:

  1. 計算量的牆:精確的量子化學計算(如耦合簇)隨電子數以 \(N^7\) 暴漲,大分子根本算不動。
  2. 軟體的牆:理論方法散落在論文裡,只有少數實驗室的程式能用;一般化學家既不懂量子力學程式設計,也沒有順手的工具。

「計算化學」要成為一門大眾化的學科,需要兩樣東西:夠快的方法與好用的軟體。這個案子的破案者不是一個人,而是一整個世代的努力——從 1970 年的 Gaussian 到 1990 年代的 Python 生態系。

偵查過程#

第一步:Gaussian 與波普爾(量子化學的大眾化)。 1970 年,約翰·波普爾(John Pople, 1925–2004)與同事發布 Gaussian 70——第一套「人人都會用」的量子化學軟體。波普爾的策略有三:

  • 方法標準化:把 Hartree-Fock、MP2、CI 等方法打包成黑箱,化學家只需輸入分子座標與方法關鍵字。
  • 基底函數組:發展 STO-nG、6-31G* 等高斯型基底(用多個高斯函數逼近 Slater 軌域,積分快得多):
\[ \phi^{STO}(r) = r^{n-1}e^{-\zeta r} \approx \sum_i c_i\, e^{-\alpha_i r^2} \]
  • 持續進化:Gaussian 版本不斷納入新方法(DFT、B3LYP),成為化學界的標準工具。

波普爾與孔恩共享 1998 年諾貝爾化學獎——「理論」(DFT)與「軟體」(Gaussian)同台領獎,象徵計算化學的成熟。

第二步:分子力學與分子動力學(大分子的突破)。 對於蛋白質、材料等大系統,量子力學算不動,替代方案是「經典化」:

  • 分子力學(MM):把原子當成「彈簧連接的球」,能量是經驗勢函數的和:
\[ V = \sum_{bonds} \frac{1}{2}k_r (r - r_0)^2 + \sum_{angles} \frac{1}{2}k_\theta(\theta - \theta_0)^2 + \sum_{dihedrals} V_n(1 + \cos(n\phi - \gamma)) + \sum_{i<j}\left(4\varepsilon_{ij}\left[\left(\frac{\sigma_{ij}}{r_{ij}}\right)^{12} - \left(\frac{\sigma_{ij}}{r_{ij}}\right)^6\right] + \frac{q_i q_j}{4\pi\varepsilon_0 r_{ij}}\right) \]

(鍵長、鍵角、二面角項 + 凡得瓦 Lennard-Jones 項 + 靜電項)。AMBER、CHARMM 等力場在 1980 年代成熟。

  • 分子動力學(MD):在力場上解牛頓方程,讓原子「動起來」:
\[ \vec{F}_i = -\nabla_i V = m_i \frac{d^2 \vec{r}_i}{dt^2} \]

用有限差分(Verlet 積分)逐步推進:算力 → 更新速度與位置 → 重複數百萬步,就能模擬蛋白質摺疊、膜融合、化學反應(結合 QM/MM)。1977 年 McCammon 等人的牛胰蛋白酶抑制劑 MD 模擬是首例。

第三步:Python 生態系(大眾化的最後一塊拼圖)。 1990 年代末起,Python 成為科學計算的通用語言:NumPy/SciPy 提供陣列與數值方法,Matplotlib 提供繪圖。化學專用的開源庫相繼問世:RDKit(化學資訊學:分子結構、指紋、藥物篩選)、ASE(原子模擬環境:接上 DFT 與 MD 引擎)、PySCF、OpenMM 等。「理論 + 軟體 + 免費工具」三合一,計算化學正式大眾化——任何化學系學生都能在自己的筆電上跑量子計算與分子模擬。

結案報告#

計算化學如今的地位:諾貝爾化學獎 1998(波普爾、孔恩)、2013(Karplus、Levitt、Warshel,多尺度模擬)連續肯定。遺產包括:

  1. 計算先行:藥物設計(虛擬篩選)、材料設計(高通量計算)、催化劑設計,「先算再做實驗」成為常態。
  2. 多尺度模擬:QM/MM 把量子與經典接起來,2013 諾獎表彰此路線;MD 模擬已能到毫秒尺度(Anton 專用機、GPU 加速)。
  3. 開源與教育:ASE、RDKit、PySCF 等開源工具讓計算化學進入大學課堂,本書的「證據與工具」正是這個傳統的延伸。
  4. AI 化學:2020 年代的機器學習勢能(MLIP)、AlphaFold 蛋白質結構預測,是這條偵查線的下一站。

證據與工具#

# 簡易分子動力學模擬:Lennard-Jones 流體,F = -∇V
import numpy as np
import matplotlib.pyplot as plt

# 設定:N 個粒子、Lennard-Jones 勢、Verlet 積分
N, L, dt = 36, 10.0, 0.005     # 粒子數、盒子邊長、時間步長
rng = np.random.default_rng(1)
pos = rng.random((N, 2)) * L   # 初始位置
vel = rng.random((N, 2)) - 0.5 # 初始速度

def forces(pos, L):
    """計算 Lennard-Jones 力(含週期邊界)"""
    f = np.zeros_like(pos)
    pe = 0.0
    for i in range(N):
        for j in range(i+1, N):
            d = pos[j] - pos[i]
            d -= L * np.round(d / L)         # 最小映射(週期邊界)
            r2 = np.dot(d, d)
            if r2 < 9.0 and r2 > 1e-9:       # 截斷半徑 3σ
                inv6 = 1 / r2**3
                flj = 24 * inv6 * (2*inv6 - 1) / r2   # LJ 力大小
                f[i] -= flj * d; f[j] += flj * d
                pe += 4 * (inv6**2 - inv6)   # 位能 V = 4[(1/r)¹²-(1/r)⁶]
    return f, pe

# Verlet 積分:先算力 → 更新位置與速度
f, pe = forces(pos, L)
pe_list, ke_list = [], []
for step in range(2000):
    vel += f * dt * 0.5          # 速度半步
    pos = (pos + vel * dt) % L   # 位置全步(週期邊界)
    f, pe = forces(pos, L)
    vel += f * dt * 0.5          # 速度再半步( leapfrog)
    pe_list.append(pe)
    ke_list.append(0.5 * np.sum(vel**2))

t = np.arange(2000) * dt
plt.plot(t, pe_list, label="位能 V")
plt.plot(t, ke_list, label="動能 K")
plt.plot(t, np.array(pe_list)+np.array(ke_list), "k--", label="總能量")
plt.xlabel("時間"); plt.ylabel("能量(LJ 單位)")
plt.title("分子動力學模擬:能量守恆(Verlet 積分)")
plt.legend(); plt.show()

print(f"模擬結束:平均動能 = {np.mean(ke_list):.3f},溫度正比於動能")
print("→ F = -∇V + 牛頓方程 + 有限差分 = 分子模擬的核心骨架")