[SciPy-User] The ode function does not take *args ?
The Helmbolds
helmrp at yahoo.com
Sat Nov 10 16:18:23 EST 2012
Consider the following ode setup:
t0 = 0
# Order of variables changed from odeint's (w, t) to (t, w).
def f(t, w, params): # Note -- no *args !!!
A, D = params
x, y = w
return [-D * y, -A * x] # Returns a list.
def jac(t, w, params): # Note -- no *args !!!
A, D = params
x, y = w
return [ [0, -D], [-A, 0] ] # Returns a list of lists.
from scipy.integrate import ode
r = ode(f, jac)
r.set_integrator('vode', method = 'adams', with_jacobian = True)
r.set_initial_value(w0, t0)
r.set_f_params(params) # Note -- no *args !!!
r.set_jac_params(params) # Note -- no *args !!!
tf = 10
dt = 1
while r.successful() and r.t < tf:
r.integrate(r.t + dt)
temp = [r.t, r.y]
print 'temp = ', temp
This produces essentially the same values as when using "odeint".
My questions are as follows:
Why the quirky change in the order of the variables?
I'm puzzled by the absence of *args or *params in "ode".
Moreover, if I change any of these to the "*" form, then
"ode" crashes with an error of the general form:
"ValueError: need more than 0 values to unpack"
What am I doing wrong?
Running latest SciPy/NumPy with latest Python 2.7.x on Windows 7 64bit.
Bob H
More information about the SciPy-User
mailing list