嗨,我正在尝试使用Solve_bvp与Barrior求解Schrödinger方程,以求解无限平方井,但是我不知道如何使用Solve_bvp做两件事。一种是设置范围,我试图给出的x轴从-b到b,但它正在求解0到b,我之前曾尝试使用solve_ivp求解,但是遇到了同样的问题。我遇到的另一个问题是如何设置边界条件,我需要考虑一阶和二阶导数,但由于我无法很好地理解文档,我有点迷茫。我正在跟踪一个发现here的示例,但是它没有给我正确的结果,因此我试图重写它。我还在另一个站点上讨论这个问题,但是这个问题比我要解决的问题here更为笼统。
这是我要开始工作的代码
from scipy.integrate import solve_bvp
from pylab import *
import numpy as np
## dimentions _
## | : | | Vmax
## | ___:___ | | _
## |___| |___| _| Vmin _|- Vb
##-B -A 0 A B*Alpha
## \______/|\______/
## Po Pf
Vmax = 55
Vmin = 0
Vb = 50
A = 1
B = 4
alpha = 1
Po = -A-B
Pf = A+B*alpha
psi_b = array([0,1]) # Wave function boundry [first dir, secound dir]
N = 1000 #steps
psi = np.zeros([N,2])
x = linspace(Po, Pf, N) # x-axis
def V(z):
'''
#Potential function in the finite square well.
'''
val=[]
for i in z:
if -A <=i <= A:
val.append( Vb)
elif i<=Po:
val.append( Vmax)
elif i>=Pf:
val.append(Vmax)
else:
val.append(Vmin)
return val
def boundary_conditions(psi_Po, psi_pf):
return (psi_b)
def SE(z, p, E):
state0 = p[1]
state1 = 1.0*(V(z) - E)*p[0]
return np.array([state0, state1])
def Wave_function(energy,psi):
y_ = np.zeros((2, x.size))
psi = solve_bvp(SE(x, psi, y_), boundary_conditions, x, y_)
print(len(psi.y))
return psi.y
def pltPotentail():
plot(x,V(x))
def main():
en = linspace(0, Vb, 10) # vector of energies where we look for the stable states
figure(1)
pltPotentail()
Wave_function(0,psi)
show()
if __name__ == "__main__":
main()