An MME:
using StaticArrays, OrdinaryDiffEq
f(x, p, t) = SA[x[2], -x[1]]
function affect!(integrator)
(u0, u1) = integrator.u
integrator.u = SA[u0, -u1]
end
function condition(u, t, integrator)
u[1]
end
cb = ContinuousCallback(condition, affect!)
u0 = SA[2.0, 1.0]
timespan = (0.0, -100.0)
prob = ODEProblem(f, u0, timespan)
sol = solve(prob, Tsit5(), callback=cb)
The error massage:
ERROR: Current interpolant only works between tprev and t
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] _change_t_via_interpolation!(integrator::OrdinaryDiffEqCore.ODEIntegrator{…}, t::Float64, modify_save_endpoint::Type{…}, reinitialize_alg::Nothing)
@ OrdinaryDiffEqCore C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\integrators\integrator_interface.jl:11
[3] change_t_via_interpolation!
@ C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\integrators\integrator_interface.jl:35 [inlined]
[4] apply_callback!(integrator::OrdinaryDiffEqCore.ODEIntegrator{…}, callback::ContinuousCallback{…}, cb_time::Float64, prev_sign::Float64, event_idx::Int64)
@ DiffEqBase C:\Users\Administrator\.julia\packages\DiffEqBase\ajV2I\src\callbacks.jl:561 [5] macro expansion
@ C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\integrators\integrator_utils.jl:319 [inlined]
[6] apply_ith_callback!
@ C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\integrators\integrator_utils.jl:305 [inlined]
[7] handle_callbacks!
@ C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\integrators\integrator_utils.jl:344 [inlined]
[8] _loopfooter!(integrator::OrdinaryDiffEqCore.ODEIntegrator{…})
@ OrdinaryDiffEqCore C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\integrators\integrator_utils.jl:243
[9] loopfooter!
@ C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\integrators\integrator_utils.jl:207 [inlined]
[10] solve!(integrator::OrdinaryDiffEqCore.ODEIntegrator{…})
@ OrdinaryDiffEqCore C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\solve.jl:621
[11] #__solve#62
@ C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\solve.jl:7 [inlined]
[12] __solve
@ C:\Users\Administrator\.julia\packages\OrdinaryDiffEqCore\yWlnm\src\solve.jl:1 [inlined]
[13] #solve_call#36
@ C:\Users\Administrator\.julia\packages\DiffEqBase\ajV2I\src\solve.jl:667 [inlined]
[14] solve_call
@ C:\Users\Administrator\.julia\packages\DiffEqBase\ajV2I\src\solve.jl:624 [inlined]
[15] #solve_up#45
@ C:\Users\Administrator\.julia\packages\DiffEqBase\ajV2I\src\solve.jl:1199 [inlined]
[16] solve_up
@ C:\Users\Administrator\.julia\packages\DiffEqBase\ajV2I\src\solve.jl:1177 [inlined]
[17] #solve#43
@ C:\Users\Administrator\.julia\packages\DiffEqBase\ajV2I\src\solve.jl:1089 [inlined]
[18] top-level scope
@ c:\Users\Administrator\Desktop\MME\src.jl:14
Some type information was truncated. Use `show(err)` to see complete types.
Version:
Status `C:\Users\Administrator\Desktop\MME\Project.toml`
[1dea7af3] OrdinaryDiffEq v6.95.1
[90137ffa] StaticArrays v1.9.13
Julia Version 1.11.3
Commit d63adeda50 (2025-01-21 19:42 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: Windows (x86_64-w64-mingw32)
CPU: 8 × Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
WORD_SIZE: 64
LLVM: libLLVM-16.0.6 (ORCJIT, skylake)
Threads: 1 default, 0 interactive, 1 GC (on 8 virtual cores)