【问题标题】:Second order delay differential equation in JuliaJulia中的二阶延迟微分方程
【发布时间】:2020-10-12 17:47:42
【问题描述】:

我是 Julia 编程的新手,我设法解决了一些一阶 DDE(延迟微分方程)和 ODE。我现在需要求解一个二阶延迟微分方程,但我没有找到有关它的文档(我以前使用过DifferentialEquations.jl)。

方程(其中 F 是函数,τ 是延迟):

我该怎么做?


这是我使用给定信息的代码,系统似乎处于静止状态,这是不正确的。我可能做错了什么。

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)

代码实际上是有效的!似乎是我的归一化常数不一致。谢谢!

【问题讨论】:

  • 格式通常是右边的函数获取当前时间的状态空间向量和延迟时间的状态列表。然后求解器被告知时间延迟。 diffeq.sciml.ai/stable/tutorials/dde_example 遵循这种模式。
  • 感谢您的回答。我已经尝试过这种格式,但我无法将 u''+u' 术语分开。

标签: julia ode dde differentialequations.jl


【解决方案1】:

你得到一个维度为 2 的状态空间,包含u = [u(t),u'(t)]。因此右侧函数的返回向量是[u'(t),u''(t)]。那么如果ud是延迟状态[u(t-τ),u'(t-τ)]右侧函数可以表述为

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多