Python 无法在ODEINT中启用全_输出

Python 无法在ODEINT中启用全_输出,python,arrays,odeint,keyerror,Python,Arrays,Odeint,Keyerror,启用完整输出应该是一项微不足道的任务,但是,与往常一样,问题有些复杂。 不幸的是,除了向您展示我的代码之外,没有任何简单的方法来描述我的问题 y_initial = pylab.array([th1,th2,th3,phi1,phi2,phi3]) t = pylab.arange(0.0, tmax, dt) ylist = odeint (derivs, y_initial, t) th1 = [ylist[j][0] for j in range(0,len(t))] th2 = [yl

启用完整输出应该是一项微不足道的任务,但是,与往常一样,问题有些复杂。 不幸的是,除了向您展示我的代码之外,没有任何简单的方法来描述我的问题

y_initial = pylab.array([th1,th2,th3,phi1,phi2,phi3])
t = pylab.arange(0.0, tmax, dt)
ylist = odeint (derivs, y_initial, t)

th1 = [ylist[j][0] for j in range(0,len(t))]
th2 = [ylist[j][1] for j in range(0,len(t))]
th3 = [ylist[j][2] for j in range(0,len(t))]
phi1 = [ylist[j][3] for j in range(0,len(t))]
phi2 = [ylist[j][4] for j in range(0,len(t))]
phi3 = [ylist[j][5] for j in range(0,len(t))]
写入odeint(derivs,y_initial,t,full_output=0)不会导致任何问题,但 写入odeint(derivs,y_initial,t,full_output=1)给出:

我假设发生此错误是因为我定义odeint的方式(使用数组等)。如果我创建一个循环来计算odeint值并将它们存储在一个数组中,然后让它继续下一行,这个问题会得到解决吗?如果是这样,这样的代码会是什么样子

如果你不明白我是怎么用一种奇怪的方式写的,原因如下:

def dth2dt (t,th1,th2,th3,phi1,phi2,phi3):
    return *some math dependent on switching the six variables around*

def dphi2dt (t,th1,th2,th3,phi1,phi2,phi3):
    return **some math dependent on switching the six variables around**

def derivs(y,t):

    dydt[0] = dth2dt(t,y[2],y[1],y[0],y[5],y[4],y[3])
    dydt[3] = dphi2dt(t,y[2],y[1],y[0],y[5],y[4],y[3])

    dydt[1] = dth2dt(t,y[0],y[1],y[2],y[3],y[4],y[5])
    dydt[4] = dphi2dt(t,y[0],y[1],y[2],y[3],y[4],y[5])

    dydt[2] = dth2dt(t,y[1],y[2],y[0],y[4],y[5],y[3])
    dydt[5] = dphi2dt(t,y[1],y[2],y[0],y[4],y[5],y[3])

    return dydt
我希望这对你们来说是显而易见的,这种方法使我能够在不必反复写出数学的情况下切换变量。但现在我无法在odeint中启用完整输出

谢谢你的时间,谢谢你的回复


Ryu

odeint的输出不同,这取决于full_输出是False还是True。您习惯于禁用完整输出时的行为。启用时,输出是一个元组(u,d),其中u是微分方程的解,d是full_输出提供的输出字典。出现key_错误是因为您所指的ylist是这个元组,而不仅仅是您所期望的ode结果。如果你改变

ylist = odeint (derivs, y_initial, t)

你应该得到你期望的ylist

ylist = odeint (derivs, y_initial, t)
(ylist, d) = odeint (derivs, y_initial, t, full_output=True)