user3780330
user3780330

Reputation: 71

Emulating MATLAB's ode15s in Python

I am working on translating a model from MATLAB to Python. The crux of the model lies in MATLAB's ode15s. In the MATLAB execution, the ode15s has standard options:

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

For reference, y0 is a vector (of size 98) as is MODELfun.

My Python attempt at an equivalent is as follows:

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)

This though, does not seem to be working. Any suggestions, or an alternative?

Edit: After looking at the output, the result I'm getting from the Python is either no change in some elements of y0 over time, or a constant change at each step for the rest of the y0. Any experience with something like this?

Upvotes: 4

Views: 6789

Answers (2)

user378704
user378704

Reputation:

According to the SciPy wiki for Matlab Users, the right way for using the ode15s is

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

Upvotes: 2

Graham G
Graham G

Reputation: 584

One point to make clear is that, unlike Matlab's ode15s, the scipy integrator 'vode' does not support models with a mass matrix. So any recommendation should include this caveat.

Upvotes: 1

Related Questions