Решение уравнения Шредингера: ValueError: установка элемента массива с последовательностью. - PullRequest
0 голосов
/ 14 ноября 2018

Мне нужно написать скрипт на python, который решает уравнение Шредингера с потенциалом, заданным параболой на некотором интервале [0, L].

Я не знаю много о питоне, и я просто попытался изменить сценарий профессора, который решает ту же проблему, но с постоянным потенциалом. Я определил новый потенциал, но я, вероятно, использую его неправильно, так как я получаю эту ошибку

Traceback (most recent call last):
  File "C:/Users/Utente/Desktop/schrodinge.py", line 43, in <module>
    out=odeint(schrodinger,init,x,(E,))
  File "C:\Users\Utente\AppData\Local\Programs\Python\Python37-32\lib\site-packages\scipy\integrate\odepack.py", line 233, in odeint
    int(bool(tfirst)))
  File "C:/Users/Utente/Desktop/schrodinge.py", line 18, in schrodinger
    return np.array([g0,g1])
ValueError: setting an array element with a sequence.

Мой код следующий:

    import numpy as np 
    import matplotlib.pyplot as plt
    from scipy.integrate import odeint

    def schrodinger(state,x,k):
        ''' system of 1st order differential equations to integrate.
            The Schrodinger equation for a free particle with wave vector,
            k**2 = 2m(E-U)/hbar**2

           args:
           state - array: psi[0] - Psi(x),  psi[1]= d/dx Psi(x).  Wave function and it's derivative.   
        '''
        g0 = state[1]
        g1 = -2*(E-Vx)*state[0]
        return np.array([g0,g1])

    L = 25
    U0 = (L/2)**2
    x1= np.arange(0., L, 0.01)
    x2= np.arange(-L, 0, 0.01)
    x3= np.arange(L, 2*L, 0.01)

    V1 = 0*x1
    V2 = U0 - (x1-(L/2))**2

    Vx = np.concatenate((V1,V2,V1))
    x = np.concatenate((x2,x1,x3))

    fig = plt.figure(num=1, figsize=(10,6))
    fig.clf()
    ax1= fig.add_subplot(111)

    ax1.plot(x,Vx)


    init=[1.,0] # the initial condition, [ Psi, d/dx Psi] at x=0.
    E_values = [U0/2,U0,2*U0]

    for E in E_values:   
        out=odeint(schrodinger,init,x,(E,))
        ax2 = fig.add_subplot(112)
        ax2.plot(x,out[:,0])


fig.canvas.draw()

fig.show()

ты знаешь, что я делаю не так? спасибо за вашу помощь !!

...