边界条件:
显然,在无限深势阱中的能量是分立的
为了说明这个问题,我们首先要回顾一下量子力学导论的部分
- import numpy as np
- import matplotlib.pyplot as plt
-
- def numerov(f,y0,dy0):
- h = 0.01
- y = np.zeros(len(f))
- y[0] = y0
- y[1] = y0 + h * dy0
- for i in range(1,len(f)-1):
- k1 = (1 + h**2/12. * f[i+1])
- k2 = 2 * (1 + h**2/12. * f[i])
- k3 = (1 + h**2/12. * f[i])
- y[i+1] = (k2*y[i] - k3*y[i-1] - h**2 * f[i] * y[i])/k1
- return y
-
- tmin,tmax = 0,1
- T = np.linspace(tmin,tmax,int((tmax-tmin)/0.01))
-
- #归一化之前波函数启动点处的导数值可以随意取
-
- y0 = 0
- dy0 = 1
-
- tol = 10 ** -6
- k = 0
- dk = 0.0001
- u = 1
- K,Kx = [],[]
-
- for n in range(1000000):
- F = lambda r:k**2
- f = np.array([F(i) for i in T])
- Y = numerov(f,y0,dy0)
-
- if abs(Y[-1]) <= tol:
- K.append(Y[-1])
- Kx.append(k)
-
- if not n%5000:
- print(n/1000000)
- k += dk
-
-
- import joblib
- joblib.dump(K,"model-Numerov-infinity-K.pkl")
- joblib.dump(Kx,"model-Numerov-infinity-Kx.pkl")
-
- #plt.plot(Kx,K)
- plt.scatter(Kx,K,s=2,c="red")
- plt.plot(Kx,K,linewidth=2,c="blue")
- plt.scatter([i*np.pi for i in range(1,30)],[0 for i in range(29)],s=2,c="green")
- #plt.scatter([np.pi*i for i in range(10)],[0.03 for i in range(10)],s=1)
- plt.show()