有什么可能的方法来停止 ODE 求解器(使用 DifferentialEquations.jl)?

c00*_*kie 4 ode julia

我正在尝试解决 ODE 问题(与 Julia 一起),该问题可以在满足特定条件时提前停止。

假设我有一个洛伦兹系统,如下所示

using DifferentialEquations

function lorenz!(du,u)
    du[1] = 10.0*(u[2]-u[1]);
    du[2] = u[1]*(28.0-u[3]) - u[2];
    du[3] = u[1]*u[2] - (8/3)*u[3];
end

u0 = [1.0;0.0;0.0]
tspan = (0.0, 100.0)

prob = ODEProblem(lorenz!,u0, tspan);
sol = solve(prob);
Run Code Online (Sandbox Code Playgroud)

并且,例如,我想在 u[3] 高于 10 时停止 ODE 求解器,如下所示。

sol = solve(prob, stopcondition = u[3]>10);
Run Code Online (Sandbox Code Playgroud)

但我不确定是否有可能在给定条件下停止 ODE 求解器。

任何相关评论将不胜感激:)

Chr*_*kas 6

是的,使用事件处理系统terminate!(integrator)中的功能。这里看起来像这样:

condition(u,t,integrator) = u[3] - 10 # Is zero when u[3] = 10
affect!(integrator) = terminate!(integrator)
cb = ContinuousCallback(condition,affect!)
sol = solve(prob, callback = cb);
Run Code Online (Sandbox Code Playgroud)