Я пытался использовать solve_ivp или solve_bvp для решения проблемы, с которой я столкнулся, но я не добиваюсь никакого прогресса.Я думаю, что код, который я здесь, будет работать, но я не могу получить правильный диапазон.по какой-то причине я не могу понять, что диапазон всегда изменяется от 0 до x, а не от -x до x, может кто-нибудь помочь мне исправить эту часть для solve_ivp?
вот код, уменьшенный до минимума
from pylab import *
from scipy.integrate import solve_ivp
from scipy.optimize import brentq
import numpy as np
import itertools
a=1
B=4
L= B+a
Vmax= 50
Vpot = False
N = 1000 # number of points to take
psi = np.zeros([N,2]) # Wave function values and its derivative (psi and psi')
psi0 = array([0,1]) # Wave function initial states
Vo = 50
E = 0.0 # global variable Energy needed for Sch.Eq, changed in function "Wave function"
b = L # point outside of well where we need to check if the function diverges
x = linspace(-B-a, L, N) # x-axis
def V(x):
'''
#Potential function in the finite square well.
'''
if -a <=x <=a:
val = Vo
elif x<=-a-B:
val = Vmax
elif x>=L:
val = Vmax
else:
val = 0
return val
def SE(z, p):
state0 = p[1]
state1 = 1.0*(V(z) - E)*p[0]
return array([state0, state1])
def Wave_function(energy):
global E
E = energy
# odeint(func, y0, t)
# solve_ivp(fun, t_span, y0)
psi = solve_ivp(SE, [-B-a, L], psi0, max_step = ((B+a+L)/(N)))
return psi.y
def main():
# main program
f2 = figure(2)
plot(x, Wave_function(9.8)[0][:1000])
grid()
f2.show()
if __name__ == "__main__":
main()
это то, что код дает мне в конце.с правой стороны все в порядке, но с левой стороны это не так.Я зависим от работы обеих сторон, а не для визуальных.
edit: для благотворительности это то, как должна выглядеть потенциальная функция:
окончательный график должен выглядеть аналогичнона это: