Julia 中的二阶延迟微分方程
Second order delay differential equation in Julia
我是 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)
代码确实有效!似乎是我的归一化常数不一致。谢谢!
你得到一个维度 2 的状态 space,包含 u = [u(t),u'(t)]
。因此 right-side 函数的 return 向量是 [u'(t),u''(t)]
。那么如果ud
是延迟状态[u(t-τ),u'(t-τ)]
右边的函数可以表示为
[ u'(t), u''(t) ] = [ u[1], -u[1] + F(ud[0],u[0]) ]
我是 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)
代码确实有效!似乎是我的归一化常数不一致。谢谢!
你得到一个维度 2 的状态 space,包含 u = [u(t),u'(t)]
。因此 right-side 函数的 return 向量是 [u'(t),u''(t)]
。那么如果ud
是延迟状态[u(t-τ),u'(t-τ)]
右边的函数可以表示为
[ u'(t), u''(t) ] = [ u[1], -u[1] + F(ud[0],u[0]) ]