在Python中模拟MATLAB的ode15

8iwquhpp  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(226)

我正在把一个模型从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的其余元素在每一步都在不断变化。

5n0oy7gb

5n0oy7gb1#

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

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

55ooxyrt2#

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

相关问题