我正在尝试解决一个ODE问题(与Julia一起),这个问题可以在满足特定条件时尽早停止。
假设我有一个Lorenz系统,如下所示
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);例如,当u3大于10时,我想停止ODE求解器,如下所示。
sol = solve(prob, stopcondition = u[3]>10);但我不确定是否有可能在给定条件下阻止ODE求解器。
任何相关意见均应感谢:)
发布于 2022-12-01 08:23:07
是的,在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);https://stackoverflow.com/questions/74638213
复制相似问题