薛定谔方程微分

计算科学 Python 算法 计算物理学 量子力学
2021-12-24 01:29:32

我正在研究薛定谔方程的修改版本(与时间无关),其中,我必须始终d2ψdx2=2(EV)ψV=0

我被要求使用 Python 来解决这个等式。我使用了以下代码:

e = 200

dx = 0.01   
xlim = 100

p = np.zeros(xlim+1)
x = np.zeros(xlim+1)

x[0] = 0
p[0] = 1 

for i in range(1, xlim):
   p[i+1] = 2 * p[i] - p[i-1] + (dx * dx) * (-2 * e * p[i])
   x[i+1] = x[i] + dx


plt.plot(x[1:], p[1:])
plt.show()

并得到以下输出:

波函数

将 dx(步长)更改为稍大的数字时,振荡看起来并不恒定。这是正常的吗?:

在此处输入图像描述

1个回答

您的代码有一个小问题,即幅度失真。您没有进行初始化p[1],这会从一开始就抛出 Verlet 步骤。如果你有这个设置,幅度将大致保持在 1 和 -1 之间。

import matplotlib.pyplot as plt    
import numpy as np    
     
e = 200    
                
dx = 0.08       
xlim = 100    
     
p = np.zeros(xlim+1)    
x = np.zeros(xlim+1)    
     
x[0] = 0     
p[0] = 1     
p[1]=p[0]+ (dx * dx) * (-e * p[0])    
     
     
for i in range(1, xlim):    
   p[i+1] = 2 * p[i] - p[i-1] + (dx * dx) * (-e * p[i])    
   x[i+1] = x[i] + dx    
     
     
plt.plot(x[1:], p[1:])    
plt.show()    

您仍然不能使用像这样大的步长,因为这会丢失曲线的太多细节,但是您现在应该能够稍微改变步长,而不会从根本上改变结果。dx=0.08