我编写了一段代码来解决一维Schrodinger方程。尽管numpy.linalg.eig()例程对于谐波振荡器运行良好,但似乎为库仑电势增加了一个虚假的解决方案。另一方面,Scipy的sparse.linalg.eigsh()似乎做得很好。这是我的脚本:
import numpy as np
import matplotlib.pyplot as plt
from scipy.sparse import diags
from scipy.sparse.linalg import eigsh
N = 500
x0 = 8
xMin, xMax = -x0, x0
xstep = (xMax - xMin) / (N - 1)
x = np.linspace(xMin, xMax, N)
k = np.array([np.ones(N-1),-2*np.ones(N),np.ones(N-1)])
offset = [-1,0,1]
Lapl = diags(k,offset).toarray() / (xstep**2)
T = -Lapl *.5
V = -1./(np.abs(x)) #Coulomb
#V = .5 * x**2 #HO
H = T.copy()
for i in range(N):
H[i,i] += V[i]
#vals, vecs = …Run Code Online (Sandbox Code Playgroud)