This is yet another question related to the obviously popular basic problem of solving an ODE (or a system of ODEs) with inputs in Julia (using DifferentialEquations
package).
Let’s consider a single (scalar) ODE of the form
dx/dt = f(x,u),
where x(0)
and u(t)
for t
in [0,tmax]
are specified. A simplest possible example is
dx/dt = -x(t) + u(t),
where x(0)=1
and u(t) = 0
for t
below (before) t=1
and it equals 1 afterwards, that is, for t>=1
(shifted/delayed Heavyside step function).
A MWE in Julia is (after changing the notation to the one favoured by the DifferentialEquations
, namely, x
is relabelled to u
and the old u
turns into a parameter p
):
using DifferentialEquations
using Plots
pyplot()
f(u,p,t) = -1.0*u + 1.0*p(t)
u0 = 1.0
p(t) = (1-t) <= 0 ? 1 : 0
tspan = (0.0,10.0)
prob = ODEProblem(f,u0,tspan,p)
sol = solve(prob)
plot(sol)
The example seems perfectly functional. However, looking at the definition of f
above, that is, f(u,p,t) = -1.0*u + 1.0*p(t)
, it cannot be unnoticed that u
is called without the argument t
whereas p
needs to have it, that is, it appears as p(t)
. Not a problem, it is just that while still learning basics of Julia, I was wondering if the code could be modified so that p
is handled in the same way as the variable u
, that is, without appending the (t)
.
Perhaps this might be more related to the basics of Julia rather than DifferentialEquations (I still find myself rather clumsy with anonymous functions and stuff).