Julia 中带有 sinh 和 cosh 函数的 ODE 不稳定性

计算科学 朱莉娅
2021-12-18 18:12:20

我想解一阶微分方程

dαdϕ=ϕσ2sin(2dα)+2dsinh(σ2αϕ)ασ2sin(2dα)+2dcos(2dα)+2dcosh(σ2αϕ),
在哪里d是固定的。我无法获得这个微分方程的解,我猜我的问题的根源在于 sinh 和 cosh 函数。实际上,我可以毫无问题地解决例如,但是返回. 为什么我可以用正弦数值求解微分方程,但不能用 sinh 求解?我把重现错误的MWE放在下面。σdα/dϕ=ϕσ2sin(2dα)dα/dϕ=2dsinh(σ2αϕ)Warning: Instability detected. Aborting

using DifferentialEquations
using Plots
            
const global s2=81. # σ^2
const global d=-0.00090         

function ode(du,u,p,t)
    α = u[1]
    du[1] = 2*d*sinh(s2*α*t)
end
α0 =[1.0] # This initial value is just a guess
prob = ODEProblem(ode,α0,(-5.0,5.0))
sol = solve(prob)
plot(sol,label="2*d*sinh(s2*α*ϕ)")

1个回答

我在 RHS 函数中插入了一条打印语句:

function ode(du,u,p,t)
    α = u[1]
    @show d,s2,α,t,2*d*sinh(s2*α*t)
    du[1] = 2*d*sinh(s2*α*t)
end

这是它显示的一阶导数计算:

(d, s2, α, t, 2 * d * sinh(s2 * α * t)) = (-0.0009, 81.0, 1.0, -5.0, 6.974413306346224e172)

让我重复一遍:你的导数是在你开始这是因为当你的导数如此巨大时,你的方程几乎无限快地发散,这解释了这种行为。6.97×10172t=5s2αt=405.0sinh(405)6.97×10172