我正在努力将模型从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的其余部分的每一步都是不变的。有这样的经历吗?
答案 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”不支持具有质量矩阵的模型。因此,任何建议都应包括此警告。