我有代码尝试在 1-D 中使用 numerov 方法来构造波函数,其中存在中心势(或多或少地考虑氢)的薛定谔方程。它不关心状态(N = 1,..),因为我的目标是理解理论和软件之间的联系。以下是一些能量的一些结果,无论它们是否是特征值,我不确定:
[6.054999999999915, 6.214999999999912, 6.534999999999905]
和一张图
。我试图实现的算法在第 6 节
PDF中有说明,但我的潜力是不同的。我的问题是,中心势在原点有 1/r,我将如何处理?(我通过添加任意 0.00001 来消除 0 在代码中做了一个回避)。
在这里看到的另一个问题中有一个更通用的代码,但我没有遵循从方程到 3d 矩阵的转变。
这是我的代码:
import numpy as np
import scipy
import matplotlib.pyplot as plt
h=np.float64(1)
m=60
c=m/2
estep = 1.0/(100)
delta = 0.0002
x=np.linspace(-1000,1000,num=m)
x=(x - x[m/2]+0.00001 )
v = 1.0/(x**2)
sig=None
E = []
def get_left(wf,k):
for i in range(2,int(c)):
wf[i] = 2*(( 1- 1/12* h**2* k[i-2]**2)*wf[i-2] - (1 + 1/12 *h**2* k[i-1]**2)*wf[i-1])/(1 + 1/12* h**2* k[i]**2)
wf[0:c] = wf[0:c]/(np.sqrt(np.sum(wf[0:c]**2)))
return wf
def get_right(wf,k):
mi = m-1
for i in range(2,int(c)):
wf[mi-i] = 2*(( 1- 1/12* h**2* k[mi-i+2]**2)*wf[mi-i+2] - (1 + 1/12 *h**2* k[mi-i+1]**2)*wf[mi-i+1])/(1 + 1/12* h**2*k[mi-i]**2)
wf[c:mi] = wf[c:mi]/(np.sqrt(np.sum(wf[c:mi]**2)))
return wf
def root_search(epsilonu, epsilonl):
en = None
it =0
while it < 10000:
phil = np.zeros(m)
phir = np.zeros(m)
phil[0] =0
phil[1] = 0.001
phir[m-1]=0
phir[m-2]=0.001
k = (-v + (epsilonu+epsilonl)/2)
phil = get_left(phil,k)
phir = get_right(phir,k)
diffl = np.diff(phil)
diffr = np.diff(phir)
erri = diffl[m/2]- diffr[m/2]
if erri < delta:
plt.plot(x, (phil+phir)**2 )
plt.savefig( str('sho'+'.png' ))
return (epsilonu+epsilonl)/2
if erri < 0 :
epsilonl = (epsilonu+epsilonl)/2
if erri > 0:
epsilonu =epsilonl
epsilonl = (epsilonu+epsilonl)/2
it+=1
return None
def start():
epsilonl=0.01
eps = epsilonl
epsilonu=None
iteration=0
sig = None
while iteration < 100000:
phil = np.zeros(m)
phir = np.zeros(m)
phil[0] =0
phil[1] = 0.001
phir[m-1]=0
phir[m-2]=0.001
k = (-v + eps)
phil = get_left(phil,k)
phir = get_right(phir,k)
diffl = np.diff(phil)
diffr = np.diff(phir)
err = diffl[m/2]- diffr[m/2]
ssig = 1 if err>0 else -1
if sig:
if sig != ssig:
epsilonu= eps
E.append(root_search(epsilonu, epsilonl))
print(E)
sig = ssig
epsilonl = eps
eps = eps+estep
iteration+=1
if __name__ == "__main__":
start()
理论:我试图求解一维薛定谔方程,
随着v作为核心势(库仑力,逆量子关系),最终的等式看起来像(具有正确选择的单位给q ^ 2 = 1,h-1 ...,hartree的能量)

