-
-
Notifications
You must be signed in to change notification settings - Fork 232
Closed
Description
using ModelingToolkit, DiffEqBase, OrdinaryDiffEq
function lotka(du,u,p,t)
x = u[1]
y = u[2]
du[1] = p[1]*x - p[2]*x*y
du[2] = -p[3]*y + p[4]*x*y
end
prob = ODEProblem(lotka,[1.0,1.0],(0.0,1.0),[1.5,1.0,3.0,1.0])
function modelingtoolkitize(prob::DiffEqBase.DEProblem)
t, = @parameters t; vars = [Variable(Symbol(:x, i))(t) for i in eachindex(prob.u0)]; params = [Variable(Symbol(:α, i); known = true)() for i in eachindex(prob.p)];
D, = @derivatives D'~t
rhs = [D(var) for var in vars]
if DiffEqBase.isinplace(prob)
lhs = similar(vars, Any)
prob.f(lhs, vars, params, t)
else
lhs = prob.f(vars, params, t)
end
eqs = vcat([rhs[i] ~ lhs[i] for i in eachindex(prob.u0)]...)
de = ODESystem(eqs)
f = ODEFunction(de, vars, params)
prob = remake(prob, f=f)
end
solve(modelingtoolkitize(prob), Tsit5())
Metadata
Metadata
Assignees
Labels
No labels