Bouncing ball
Model
We model the bouncing ball as a hybrid automaton with one location and a self-loop. See for example [LG09] pp. 79-83.
using ReachabilityAnalysis, ModelingToolkit
function _bouncing_ball()
var = @variables x v
# "falling" mode with invariant x >= 0
invariant = HalfSpace(x ≥ 0, var)
flow = @system(z' = [0.0 1.0; 0.0 0.0] * z + [0.0, -9.81], z ∈ invariant)
# guard x == 0 && v ≤ 0
guard = HPolyhedron([0 ≤ x, x ≤ 0, v ≤ 0], var)
# reset map v⁺ := -cv
assignment = ConstrainedLinearMap([1.0 0.0; 0.0 -0.75], guard)
# initial-value problem
return HybridSystem(flow, assignment)
end
function model(X0)
H = _bouncing_ball()
return @ivp(H, z(0) ∈ X0)
end
model (generic function with 1 method)
References
- LG09Le Guernic, Colas. Reachability analysis of hybrid systems with linear continuous dynamics. Diss. 2009.