我正在把一个模型从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条答案
按热度按时间5n0oy7gb1#
根据SciPy wiki for Matlab Users,使用ode15s的正确方法是
55ooxyrt2#
有一点需要澄清的是,与Matlab的ode15不同,scipy积分器“vode”不支持带有质量矩阵的模型,因此任何建议都应该包括这一警告。