2017-06-01 6 views
0

J'ai un problème avec le petit programme suivant pour résoudre les équations de vitesse laser (premier ordre des équations différentielles ordinaires) en utilisant Python (odeint).Erreur: l'index 2 est hors limites pour l'axe 0 avec la taille 1

Quand je lance le programme, une erreur apparaît toujours:

index 2 is out of bounds for axis 0 with size 1 

Les équations sont correctes; Je ne sais pas ce que cette erreur signifie. Est-ce que quelqu'un peut expliquer ce que cela signifie et comment le réparer?

def Rate(y,t): 
    D = y[0] 
    P = y[1] 
    w = 1.3 
    F = 0.0001 
    R = 90 
    dD_dt= w - D*P -D 
    dP_dt= R*D*P - R*P +F*D 
    dydt = [dD_dt,dP_dt] 
    return dydt 
    y0=0 
    t=np.arange(0,100,0.01) 
    sol=odeint(Rate,y0,t) 
    plt.plot(t,sol[:,0],'b',label='normalized inversion(t)') 
    plt.plot(t,sol[:,1],'g',label='normalized photon density(t)') 
    plt.legend() 
    plt.xlabel('t') 
    plt.grid() 
    plt.show() 

et l'erreur est:

IndexError        Traceback (most recent call last) 
    <ipython-input-20-50f3d07b9161> in <module>() 
    ----> 1 sol=odeint(Rate,y0,t) 

    C:\Users\asem\Anaconda2\lib\site-packages\scipy\integrate\odepack.pyc in 
    odeint(func, y0, t, args, Dfun, col_deriv, full_output, ml, mu, rtol, atol, 
    tcrit, h0, hmax, hmin, ixpr, mxstep, mxhnil, mxordn, mxords, printmessg) 
    213  output = _odepack.odeint(func, y0, t, args, Dfun, col_deriv, ml, mu, 
    214        full_output, rtol, atol, tcrit, h0, hmax, 
    hmin, 
    --> 215        ixpr, mxstep, mxhnil, mxordn, mxords) 
    216  if output[-1] < 0: 
    217   warning_msg = _msgs[output[-1]] + " Run with full_output = 1 to 
    get quantitative information." 

    <ipython-input-18-2f25cf16efde> in Rate(y, t) 
     1 def Rate(y,t): 
     2  D =y[0] 
     ----> 3  P =y[2] 
     4  w = 1.3 
     5  F = 0.0001 

     IndexError: index 2 is out of bounds for axis 0 with size 1 

Répondre

0

Essayez une print y entre les lignes 2 et 3 pour voir ce que vous avez vraiment.

Cela signifie que y n'a qu'un seul élément. Vous ne pouvez pas obtenir l'élément 2 (le troisième élément) quand la liste n'en a qu'une.

Veuillez noter que votre code et le message d'erreur ne correspondent pas (y [1] versus y [2]).