с помощью solve_bvp для решения уравнения Шредингера - PullRequest
0 голосов
/ 21 ноября 2018

Привет. Я пытаюсь выровнять уравнение Шредингера для бесконечной квадратной лунки с помощью барьера с использованием solve_bvp, но я не понимаю, как сделать две вещи с solve_bvp.один устанавливает диапазон, ось x, которую я пытаюсь задать, переходит от -b к b, но это решение от 0 до b, я ранее пытался решить с solve_ivp, но столкнулся с той же проблемой.другая проблема, которую я имею, состоит в том, как установить граничное условие, мне нужно принять во внимание первую и вторую производную, но я немного растерялся, потому что не очень хорошо понимаю документацию.Я следовал примеру, найденному здесь , но он не давал мне правильных результатов, поэтому я пытаюсь переписать его.Я также обсуждаю проблему на другом сайте, но она более общая, чем то, что я пытаюсь решить здесь .

это код, который я пытаюсь заставить работать

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()

1 Ответ

0 голосов
/ 13 августа 2019

Я решил конечный квадратный потенциал скважины, используя scipy.integrate.solve_bvp здесь .

...