Ошибка: индекс 2 выходит за пределы оси 0 с размером 1

У меня проблема со следующей небольшой программой для решения уравнений скорости лазерного излучения (обыкновенные дифференциальные уравнения первого порядка) с использованием Python (odeint).

Когда я запускаю программу, всегда появляется ошибка:

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

Уравнения верны; Я не знаю, что означает эта ошибка.

Может кто-нибудь объяснить, что это значит и как это исправить?

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

и ошибка:

    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

person Asem Aji    schedule 01.06.2017    source источник


Ответы (1)


Попробуйте поставить print y между строками 2 и 3, чтобы увидеть, что у вас действительно есть.

Это означает, что y имеет только один элемент. Вы не можете получить элемент 2 (третий элемент), если в списке только один.

Обратите внимание, что ваш код и сообщение об ошибке не совпадают (y [1] против y [2]).

person Prune    schedule 01.06.2017