我试图求解区间[0,L]
上无限位势阱V=0
的问题。这个练习给出了波函数及其导数在0
处的值分别是0,1
。这允许我们使用scipy.integrate.odeint
函数来解决给定能量值的问题。在
现在的任务是在进一步的边界条件下,即L
处的波函数是0
的进一步边界条件下,使用python上的寻根函数来找到能量本征值。我做了一些研究,只找到了一种叫做“射击法”的东西,我不知道该如何实施。另外,我遇到了solve-BVP-scipy函数,但是我似乎不明白这个函数的第二个输入中到底发生了什么(边界条件残差)
m_el = 9.1094e-31 # mass of electron in [kg]
hbar = 1.0546e-34 # Planck's constant over 2 pi [Js]
e_el = 1.6022e-19 # electron charge in [C]
L_bohr = 5.2918e-11 # Bohr radius [m]
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
def eqn(y, x, energy): #array of first order ODE's
y0 = y[1]
y1 = -2*m_el*energy*y[0]/hbar**2
return np.array([y0,y1])
def solve(energy, func): #use of odeint
p0 = 0
dp0 = 1
x = np.linspace(0,L_bohr,1000)
init = np.array([p0,dp0])
ysolve = odeint(func, init, x, args=(energy,))
return ysolve[-1,0]
这里的方法是在solve(energy,func)中将eqn作为func输入。玻尔是这个问题的L值。我们试图用一些scipy方法数值求解能量本征值
对于scipy中的所有其他解算器,参数顺序}中,可以通过给出选项
x,y
,甚至在{tfirst=True
来使用这个顺序。因此改为对于BVP解算器,必须将能量参数视为 具有零导数的额外状态分量,从而增加了第三个槽 在边界条件下。Scipy的bvp_solve允许将其作为参数保存, 这样你就可以
^{pr2}$下一步构造一个接近可疑基态的初始状态并调用解算器
然后制作出情节
相关问题 更多 >
编程相关推荐