This Demonstration simulates the motion of a double pendulum with the upper bob bouncing back from an obstruction along the vertical axis.
Mathematica's built-in function WhenEvent, triggered whenever the upper bob crosses the vertical, reverses and reduces the angular speed of the upper pendulum and changes the behavior of the lower pendulum accordingly.
In this Demonstration, the upper arm has both mass and length set to 1. The lower arm has mass and length . The angular positions of the arms are and .
Lagrangian mechanics can be used to derive the equations of motion of the double pendulum. The potential energy and kinetic energy of the pendulum are
Adding the kinetic energy and subtracting the potential energy gives the Lagrangian, .
Substituting this into the Euler–Lagrange equations results in the equations of motion:
During the solution of these differential equations, the event θ[t]⩵0 triggers WhenEvent, resulting in an action for each of the angular positions of the bobs: is replaced by and is replaced by , where is the rebound ratio.
The formula for the rebound actions was taken from .
Snapshot 3 shows that for a 100% elastic impact (), the total energy stays constant during the animation.
 S. Timoshenko and D. H. Young, "Lagrangian Equations for Impulsive Forces," Advanced Dynamics, New York: McGraw-Hill, 1948 pp. 225–230.