在此之前,我已经写了一段数值求解一维量子谐振子波函数的 Python 代码。建议先从该帖子开始阅读(Numerov 方法数值求解一维量子谐振子波函数),涉及到的 Numerov 方法的原理就不再重复了。
首先写出径向部分的 Schroedinger 方程:
由于 Numerov 方法处理的是形如 ψ′′=G(r)ψ(r) 的微分方程,但上式中存在 R′ 项,所以需要消掉。
令 F(r)=rR(r),所以:
R(r)=r−1F(r)R′=−r−2F+r−1F′, R′′=2r−3F−2r−2F′代入到径向 Schroedinger 方程中:
−ℏ22mF′′(r)+[V(r)+l(l+1)ℏ22mr2]F(r)=EF(r)F′′(r)=G(r)F(r), G(r)=mℏ2(2V−2E)+l(l+1)r2递推关系已得到,现在需要讨论边值条件。由于 r→0 时,R(r)∼rl, l=0,1,2,…,n,因此 F=rR 在 r=0 处必为 0。
但是这里有一个小问题,r=0 时,前式中 G(r) 会遇到除以 0 的情况。为了避免这一情况,我们以一个非常小的 r 作为近似零点(比如令 r=10−15)。(但是又会带来另一个问题,对于 l=0 的径向波函数,R(r)|r=0 本应为一非零正值。但我们用该方法产生的结果是在(近似)零点处,波函数为 0。然而目前暂时不知道如何处理)
在使用程序实现之前,还是先完成公式的非量纲化。(具体步骤不写了)
Vr=−e24πϵ0r=−e′2rrEr=Eμe′4ℏ−2=−e′22n2得到约化的 Schroedinger 方程和递推项分别为:
F′′r=GrFr, Gr=l(l+1)r2r−2rr−2Er现在就可以使用程序实现了(和之前那个区别不大)。
写的 Python 代码如下:
1 | #!/usr/bin/env python3 |
运行该程序需要我们输入角量子数、间隔长度、间隔数和能量。
例如,我们想绘制 4p 轨道径向部分波函数的图像。首先估计能量:Er=−12×42=−0.03125。然后由 −0.03125=−1rr 得到 r=32。稍取更远的点 r=36 来验证波函数在此处是否趋于 0。设间隔长度为 0.1,间隔数自然为 360。得到结果如下
1 | Er=-0.03125 |
用以上数据绘图,可看到与解析解得到的结果非常接近。(注:程序输出的数值与波函数的表达式算出的结果并不一定相同,这是因为没有对数值计算得到的结果进行归一化,将其乘以适当的系数后与理论值基本一致。)
之前提到了,对于 s 轨道,该程序有一些缺陷,由下图可以看出:
当 r=0 时,R(r) 本不为 0,所以上图在零点附近的表现不太正确(后面是比较吻合的)。