2016-12-28 60 views
0

我是一个开始的程序员,我想集成一个使用ode'dopri5'的函数,但我认为我没有正确地做。这个参考没有太大的帮助,而且我有一个我不认识的错误。所以,最初我使用odeint,它工作正常。下面是代码块:运行ode,dopri5方法,错误:不支持的操作数类型'ode'

Itmp = odeint(te.rhs, Itmp, [xLim[i], xLim[i+1]], mxstep=10000, 
          atol=1e-11, rtol=1e-11, args=(f,))[1] 

而且我尝试使用dopri5整合是这样的:

Itmp = ode(te.rhs).set_integrator('dopri5', max_step=10000,atol=1e-11, rtol=1e-11) 

我得到的错误是说ITMP类型为“颂歌”,而我需要它像odeint给我的一个浮子。

下面是具体的错误,(我尝试从一个浮动减去ITMP):

unsupported operand type(s) for -: 'ode' and 'float' 

当我使用Python调试器,并尝试打印出ITMP,它给了我

<scipy.integrate._ode.ode object at 0x10d6ab410> 

而我继续它停止与上述错误。我猜测我没有正确写出ode命令。任何帮助将不胜感激!

+0

请问您可以发布[mcve]吗?就目前而言,很难说出问题的起因。唯一想到的是,你对初始条件和集成对象('Itmp')使用相同的变量名,这是非常糟糕的做法,并可能导致错误。 – Wrzlprmft

+0

您是否考虑过ODE函数的不同参数顺序? 'odeint'需要'odefunc(state,time)','ode'使用'odefunc(time,state)'。 – LutzL

回答

0

ode类的构造函数的返回值是ode类型的实例对象。此时,没有发生整合。为此,您需要调用集成器的阶跃函数。在该步骤之后,新状态位于ode对象的y字段中。

请参阅ode课程的文档以获取更多详细信息。

您应该注意到您没有将初始条件和积分间隔的结束都传递给积分器。

相关问题