我使用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
答案 0 :(得分:0)
在第2行和第3行之间尝试print y
,看看你到底有什么。
这意味着y
只有一个元素。当列表只有一个时,你不能得到元素2(第三个元素)。
请注意您的代码和错误消息不匹配(y [1]与y [2])。