用Python模拟MATLAB的ode15s

时间:2014-06-26 17:22:29

标签: python matlab scipy ode integrate

我正在努力将模型从MATLAB转换为Python。模型的关键在于MATLAB的ode15s。在MATLAB执行中,ode15s有标准选项:

options = odeset()
[t P] = ode15s(@MODELfun, tspan, y0, options, params)

作为参考,y0是一个向量(大小为98),与MODELfun一样。

我对等效的Python尝试如下:

ode15s = scipy.integrate.ode(Model.fun)
ode15s.set_integrator('vode', method = 'bdf', order = 15)
ode15s.set_initial_value(y0).set_f_params(params)
dt = 1 
while ode15s.successful() and ode15s.t < duration:
     ode15s.integrate(ode15s.t+dt)

但是,这似乎不起作用。有什么建议或替代方案吗?

编辑: 在查看输出之后,我从Python得到的结果是y0的某些元素随着时间的推移没有变化,或者在y0的其余部分的每一步都是不变的。有这样的经历吗?

2 个答案:

答案 0 :(得分:2)

根据SciPy wiki for Matlab Users,使用ode15s的正确方法是

scipy.integrate.ode(f).set_integrator('vode', method='bdf', order=15)

答案 1 :(得分:1)

需要明确的一点是,与Matlab的ode15不同,scipy积分器“ vode”不支持具有质量矩阵的模型。因此,任何建议都应包括此警告。