我正在尝试解决 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 求解器。
任何相关评论将不胜感激:)
是的,使用事件处理系统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)
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |