跳到正文
EN

4.5

自定义势能的数值求解器

把上一节的方法打包成通用求解器:喂进任意一条势能曲线,吐出能级和波函数——然后用双势阱验收,顺手解释氨分子微波激射器。

建议先掌握

学完本节你应该能

  • 把有限差分法封装成对任意 V(x) 可用的求解器,并会做量纲换算
  • 按检查清单验收数值结果:节点数、宇称、正交性、双重收敛
  • 用求解器解双势阱,读出隧穿劈裂并解释其指数敏感性
  • 从劈裂的一对能级推出左右振荡的周期,联系氨分子激射器与化学键

上一节我们对着谐振子把有限差分法走通了一遍。但每次换一个势都重新摆弄网格、单位和检查项,太不成体统。这一节做两件事:把方法打包成一个随取随用的求解器;再用它啃一块解析方法啃不动的硬骨头——双势阱——并从数值结果里读出真实的物理:氨分子的微波激射器,以及化学键的雏形。

求解器本体

代码几乎就是上一节的翻版,唯一的新意是把「势」作为参数传进去——任何能对数组求值的函数都行:

import numpy as np
from scipy.linalg import eigh_tridiagonal

def solve(V, L, N, k=6):
    """解 -psi''/2 + V(x) psi = E psi(无量纲单位 hbar = m = 1)。

    V : 势能函数,接受 numpy 数组
    L : 求解区间 [-L/2, L/2] 的宽度(两端视为无限高墙)
    N : 内部格点数
    k : 要求的最低能级个数
    返回:格点 x、能级 E[0..k-1]、波函数 psi[:, i](已归一化)
    """
    x = np.linspace(-L/2, L/2, N + 2)[1:-1]
    h = x[1] - x[0]
    diag = 1.0 / h**2 + V(x)
    off  = -0.5 / h**2 * np.ones(N - 1)
    E, psi = eigh_tridiagonal(diag, off, select='i', select_range=(0, k - 1))
    return x, E, psi / np.sqrt(h)

先跑一遍已知答案,确认没抄错:

x, E, psi = solve(lambda x: 0.5 * x**2, L=16, N=1000)
print(np.round(E, 4))    # [0.5  1.5  2.4999  3.4998  4.4997  5.4995]

谐振子能级 n+12n+\frac12 如期而至。

**量纲怎么办?**代码用的是 =m=1\hbar=m=1 的无量纲单位——这不是偷懒,是数值计算的标准操作:避免让 103410^{-34} 量级的数在浮点运算里乱窜。换算规则一句话:选定长度单位 L0L_0,能量单位就自动是 ε0=2/(mL02)\varepsilon_0=\hbar^2/(mL_0^2)。对电子取 L0=1L_0=1 nm:

ε0=(c)2mc2L02=197.32511000×120.0762 eV(4.5.1)\varepsilon_0=\frac{(\hbar c)^2}{mc^2\,L_0^2}=\frac{197.3^2}{511000\times1^2}\approx0.0762\ \text{eV}\tag{4.5.1}

把真实势按 ε0\varepsilon_0 缩成无量纲数喂进去,算出的 EE 再乘回 ε0\varepsilon_0,就是 eV。

验收实战:双势阱

现在上主菜。取

V(x)=V0(x21)2(4.5.2)V(x)=V_0\,(x^2-1)^2\tag{4.5.2}

两个极小值在 x=±1x=\pm1,中间隔着高 V0V_0 的驼峰。这是解析方法的坟场——没有封闭解——却是物理的富矿:氨分子里氮原子在氢平面两侧的翻转、化学键中共享的电子、超导量子比特的双阱回路,全是它的变奏。

对求解器来说它毫无特殊之处,一行换势:

x, E, psi = solve(lambda x: 20.0 * (x**2 - 1)**2, L=8, N=2000)
print(np.round(E, 3))    # [6.036  6.056  16.23  17.111  23.379  27.933]

盯住这串数字,它在讲一个故事:

  • E0=6.036E_0=6.036E1=6.056E_1=6.056 挤成一对,只差 ΔE=0.019\Delta E=0.019;而 E1E_1E2E_2 隔着足足 10.210.2。能级不再等距铺开,而是成对出现、对内几乎简并
  • 检查波函数:ψ0\psi_0 是偶函数——左右两阱上各一个鼓包,同号相连;ψ1\psi_1 是奇函数——同样的两个鼓包,右边反号,中间穿零。清单第 3 条通过:势对称,偶奇交替。
  • 谐振子极限也对得上(清单第 5 条):单个阱底附近 V(±1)=8V0=160V''(\pm1)=8V_0=160,等效频率 ω=16012.6\omega=\sqrt{160}\approx12.6,零点能约 ω/26.3\omega/2\approx6.3——与 E06.0E_0\approx6.0 相符,差的那点正是非谐修正。

为什么挤成一对?想象驼峰无限高:左阱和右阱是两个隔绝的世界,各有一个基态,能量完全相同——严格二重简并。驼峰有限时,两阱的波函数尾巴在峰下隧穿相遇,简并被打破,一个能级劈成两个。ΔE\Delta E 就叫隧穿劈裂,它直接量度两阱间「串门」的难易。

数值可以当场验证这层解释:把驼峰从 V0=20V_0=20 降到 1010,劈裂从 0.0190.019 跳到 0.1250.125——驼峰高度减半,劈裂涨了六倍多。这种不成比例的剧烈响应正是 2.11 节隧穿指数 e2κa\ee^{-2\kappa a} 的指纹:劈裂对势垒参数指数敏感

从一对能级到来回振荡

近简并的一对能级不只是能谱上的装饰——它藏着一台钟。

把它变成你的工具

这个求解器从此是你的实验台。几个值得亲手跑的势(每个都记得过验收清单):

  • 不对称双阱 V0(x21)2+λxV_0(x^2-1)^2+\lambda x:加一点点倾斜 λ\lambda,看近简并的一对如何被拆散、波函数如何各自缩回一个阱——4.1 节「势不对称则宇称失效」的数值版。
  • 斜底阱 V=αxV=\alpha xx>0x>0,左端为墙):三角形阱,半导体异质结界面处电子的真实处境。
  • 截断谐振子:把 x2/2x^2/2 在某高度削平,数一数还剩几个束缚态,对照 4.1 节的 z0z_0 计数经验。

写论文级的代码还会再加两样:Numerov 方法把精度从 O(h2)O(h^2) 提到 O(h4)O(h^4),虚时间演化处理二维三维——但骨架不变:离散化、对角化、验收

本章结束

盘点一下这一章添置的家当:宇称用一个对易子把束缚态整理成偶奇交替,还免费划掉一批积分;相移把散射浓缩成一个角度,共振与束缚态在 Levinson 定理里握手;传递矩阵把多层结构变成 2×22\times2 乘法,交出了共振隧穿和能带;有限差分把「算符即矩阵」落成代码,任意一维势从此都是十行程序的事。一维世界,至此可以说尽在掌握。

但真实的原子不是一维的。氢原子里的电子活在三维库仑势中,而三维带来一个一维根本没有的角色:转动。粒子可以绕着核转,转动有快慢、有方向——角动量登场。好消息是你的工具全都用得上:中心势下的三维方程可以分离出一个径向方程,它恰恰活在半轴上,正是 4.2 节那个「墙加势」的舞台。坏消息(其实是最精彩的消息)是角向部分自成天地:三个角动量分量两两不对易[L^x,L^y]=iL^z[\hat L_x,\hat L_y]=\ii\hbar\hat L_z——第 3 章的对易子代数将不再只是判断「能否同时测准」的工具,而是亲手把角动量的取值一格一格出来。

第 5 章,从转动开始。

全站第 35 / 106 节 · 用 翻页