# desolve_rk4 cannot handle a piecewise function

I am trying to get a numeric solution to a differential equation involving a function that is piecewise (actually defined using an if/else statement). I successfully generated a slopefield using the lambda function, but desolve_rk4 seemingly cannot cope with this syntax. It seems to me that a numeric solver should be able to handle a function defined this way, but perhaps I am just doing something wrong?

Code:

var('t')
def f(t):
if t<5:
return 3
else:
return 0
V=function('V',t)
desolve_rk4(lambda t,V: ((f)-V)/(2.3*1.2),V, ics=(0,0),ivar=t)

edit retag close merge delete

Short answer is that Maxima doesn't know what to do with such a Python lambda function, and this uses a Maxima functionality.

Sort by » oldest newest most voted

You can do this using desolve_odeint. I'm not sure why it's not working in desolve_rk4. Try this:

var('t s V')
def f(t):
if t<5:
return 3
else:
return 0
def rhs(V,s,t):
return ((f(t)-V)/(2.3*1.2))
F=[SR(1),rhs]
tlist=srange(0,10,0.1)
ans=desolve_odeint(F,[0,10],tlist,[s,V],ivar=t)
line(ans)

more