我正在尝试使用sundials.jl解决茱莉亚的DAE系统。原始代码可以正常工作,但是用于不确定性量化的蒙特卡洛仿真有时会导致分割错误。
`struct s_base
s1::Float64
s2::Float64
end
#DAE Tests
using DifferentialEquations
using Sundials
function f(out,du,u,p,t)
out[1] = - p.s1*u[1] + p.s2*u[2]*u[3] - du[1]
out[2] = + p.s1*u[1] - 3e7*u[2]^2 - p.s2*u[2]*u[3] - du[2]
out[3] = u[1] + u[2] + u[3] - 1.0
end
u₀ = [1.0, 0, 0]
du₀ = [-0.04, 0.04, 0.0]
tspan = (0.0,100000.0)
differential_vars = [true,true,false]
for n=1:1000000
s=s_base(.04,1e4)
prob = DAEProblem(f,du₀,u₀,tspan,s,differential_vars=differential_vars)
sol = solve(prob,IDA())
end
`
我通过修改julia文档中的dae示例创建了上面的玩具示例以显示问题,但是玩具中的错误发生率低于实际代码中的错误发生率(尽管仍然会发生)。
感谢任何人可能提供的帮助!