2
votes

I'm new to Julia programming I managed to solve some 1st order DDE (Delay Differential Equations) and ODE. I now need to solve a second order delay differential equation but I didn't manage to find documentation about that (I previously used DifferentialEquations.jl).

The equation (where F is a function and τ the delay):

Image of the equation

How can I do this?


Here is my code using the given information, it seems that the system stay at rest which is incorrect. I probably did something wrong.

function bc_model(du,u,h,p,t)
 
    # [ u'(t), u''(t) ] = [ u[1], -u[1] + F(ud[0],u[0]) ] // off by one in julia A[0] -> A[1]
    γ,σ,Q = p
    ud = h(p, t-σ)[1]
    du = [u[2], + Q^2*(γ/Q*tanh(ud)-u[1]) - u[2]]
 
end
 
 u0 = [0.1, 0]
 h(p, t) = u0
 
 lags = [σ,0]
 tspan = (0.0,σ*100.0)
 alg = MethodOfSteps(Tsit5())
 
p = (γ,σ,Q,ω0)
prob = DDEProblem(bc_model,u0,h,tspan,p; constant_lags=lags)
sol = solve(prob,alg)
plot(sol)

The code is in fact working! It seems that it is my normalization constants that are not consistent. Thank you!

1
The format is usually that the right-side function gets the state space vector at the current time and a list of states for the delayed times. The solver then gets told the time delays. diffeq.sciml.ai/stable/tutorials/dde_example follows this pattern.Lutz Lehmann
Thank you for your answer. I have tried this format but i dont manage to separate the u''+u' termes.Brian Sinquin

1 Answers

2
votes

You get a state space of dimension 2, containing u = [u(t),u'(t)]. Consequently the return vector of the right-side function is [u'(t),u''(t)]. Then if ud is the delayed state [u(t-τ),u'(t-τ)] the right side function can be formulated as

[ u'(t), u''(t) ] = [ u[1], -u[1] + F(ud[0],u[0]) ]