Going up! You get into a stationary elevator with a bouncing ball. Its collisions with the floor are perfectly elastic; it always bounces to the same height—in an inertial frame. In this problem, we will simulate what happens to the bounce as the elevator’s acceleration increases very slowly over time.
Suppose at t = 0 the height of the ball's bounce is h 0 = 1 m and the elevator begins accelerating upward with a slowly increasing rate a ( t ) = ϵ t . When the acceleration of the elevator reaches a = 2 1 g , what is the peak height of the ball above of the floor in each bounce?
Details & Assumptions
import math g = 10.0 #gravity epsilon = 0.01 #rate of increase of acceleration #Initially, the ball is coming off a bounce with velocity that would take it to a height of 1 m in a stationary elevator. initialState = {"vBall": math.sqrt(2 * g), "vElev": 0, "aElev":0} #vBall: ball velocity // vElev: elevator velocity // aElev: elevator acceleration def update(state): # This function uses kinematics to calculate exactly how much time elapses between two consecutive bounces. # Then computes vBall, vElev and aElev immediately after the next bounce. # #Input: the state of the system as the ball is coming off a bounce with the elevator floor #Returns: the state immediately after the next bounce. Calling this function repeatedly moves the system forward in time. ###Add code HERE to compute the state of the ball immediately before the next bounce### beforeCollision = {"vBall": vBall_New, "vElev": vElev_New, "aElev": aElev_New} #state right before the collision with the floor afterCollision = bounce(beforeCollision) #apply the effect of the collision on vBall return afterCollision def bounce(state): #This function applies the update rule to vBall during an instantaneous elastic collision with the floor. return {"vBall": (-state["vBall"] + 2 * state["vElev"]), "vElev": state["vElev"], "aElev": state["aElev"]} def hmax(state): #This function computes the maximum height after a bounce. At tmax, the relative speed vBall-vElev = 0 and the ball reaches its max height. tmax = 1 / (epsilon) * (-(g + state["aElev"]) + math.sqrt((g + state["aElev"])**2 + 2 * epsilon * (state["vBall"] - state["vElev"]))) #Returns the difference between the height of the ball and the elevator floor return state["vBall"] * tmax - 0.5 * (g + state["aElev"]) * tmax ** 2 - state["vElev"] * tmax - 1/6 * epsilon * tmax**3 def simulate(state): #This function updates the initial state until the acceleration exceeds g/2, then prints the max height of the previous bounce. while (state["aElev"] < 0.5 * g): prevState = state #Save the previous state of the system state = update(state) #Compute the state after the next bounce print("The max height is %f" % hmax(prevState)) simulate(initialState)
This section requires Javascript.
You are seeing this because something didn't load right. We suggest you, (a) try
refreshing the page, (b) enabling javascript if it is disabled on your browser and,
finally, (c)
loading the
non-javascript version of this page
. We're sorry about the hassle.
This is a fantastic solution—I did not think it could be calculated by simple means. Beautifully done 😍 .
Please explain it in more detail because I don't understand it. And it would be really nice if you could also tell me the representations of the additional symbols you have used. Thanks.
Log in to reply
@Frederick Doering can you expand on why you make the replacement h → h ave ? It is a subtle point, and the reasoning to justify it is pretty interesting/makes connections to @Sean Lourette 's approach.
Elevator floor position changes as x e l e v ( t ) = x e + v e ⋅ t + a e ⋅ 2 t 2 + ϵ ⋅ 6 t 3 ball position is x b a l l ( t ) = x b + v b ⋅ t − g ⋅ 2 t 2 ball height relative to the elevator floor is x b a l l ( t ) − x e l e v ( t ) = v b ⋅ t − g ⋅ 2 t 2 − v e ⋅ t − a e ⋅ 2 t 2 − ϵ ⋅ 6 t 2 next bounce occurs when height is zero t ⋅ ( ( v b − v e ) − 2 ( g + a e ) ⋅ t − 6 ϵ ⋅ t 2 ) = 0 or t next bounce = 2 ⋅ 6 ϵ − 2 ( g + a e ) + 4 ( g + a e ) 2 + 4 ⋅ 6 ϵ ⋅ ( v b − v e )
so we need to complete update function:
#calculate time of next bounce
t_next = 3 / (2 * epsilon) * (-(g + state["aElev"]) + math.sqrt((g + state["aElev"])**2 + 8 * epsilon * (state["vBall"] - state["vElev"]) / 3))
#calculate velocity and acceleration before next bounce
vBall_New = state["vBall"] - g * t_next
vElev_New = state["vElev"] + state["aElev"] * t_next + 0.5 * epsilon * (t_next ** 2)
aElev_New = state["aElev"] + epsilon * t_next
and simulation outputs answer:
The max height is 0.873609
Thank you!. What I still do not understand is why the speed after the bounce is 2 ve - v bf. Can anyone explain?
Log in to reply
Hey Jose, I'm going to assume that you're comfortable with the idea that if the ball bounces on the floor, its velocity goes from v b to − v b (because it reflects off the floor). If not, let me know.
So, let's assume that the initial velocity of the ball is zero. It's just sitting there, the elevator comes along and hits it traveling with velocity v e . Let's assume that the velocity of the elevator goes from v e to v e − Δ v e . Writing down the conservation of momentum, we have
M v e before = m v b + M ( v e − Δ v e ) after
which simplifies to M Δ v e = m v b .
This gives us a simple relationship between the change in velocity of the elevator and the final velocity of the ball v b = m M Δ v e .
Now if we write down the conservation of energy, we have
2 1 M v e 2 before m M v e 2 v b 2 = 2 1 m v b 2 + 2 1 M ( v e − Δ v e ) 2 after = v b 2 + m M ( v e 2 − 2 v e Δ v e ) = 2 m M v e Δ v e
Notice that I ignored the term on the right hand side proportional to ( Δ v e ) 2 , that's because we assume it is very small relative to v e .
Now, if we substitute Δ v e = M m v b into the last equation we find
v b 2 v b = 2 m M v e Δ v e = 2 m M v e M m v b = 2 v e
which is the result we're after.
The calculation turns on the idea that the change in velocity of the elevator is very small compared to that of the ball. This should be a reasonable assumption given that the elevator's speed is imposed by the motor that's lifting it, so Δ v e is very tiny indeed.
I not understand that how peak height ??
This problem has an elegant solution using the adiabatic invariant, which should work as long as ϵ is small. First, using conservation of energy, we find an equation for the relationship between the maximum displacement and maximum momentum.
E = 2 m p 0 2 = m g x 0
x 0 = 2 m 2 g p 0 2 , p 0 = 2 m 2 g x 0
Then we can use the adiabatic invariant (area enclosed in the phase diagram is constant under adiabatic changes) as a second relationship between these two quantities.
A = ∮ p d x
A ∝ x 0 ⋅ p 0
Combining these we can eliminate momentum and see how maximum displacement is affected by g, Earth's gravitational constant.
A ∝ g 1 / 2 x 0 3 / 2
x 0 ∝ g − 1 / 3
In this problem, increasing acceleration to 0 . 5 g has the same effect as increasing g by a factor of 1.5 so
g ↦ ( 2 3 ) g
p 0 ↦ ( 2 3 ) 1 / 3 p 0
x 0 ↦ ( 3 2 ) 1 / 3 x 0 ≈ 0 . 8 7 4 x 0
Is there an intuitive reason why ∮ p d x should stay unchanged over the course of the acceleration?
Log in to reply
I'm not sure how intuitive this explanation is, but I'll give it a shot. If g is only increased when the ball is at its maximum displacement, then x 0 should remain unchanged and p 0 will be larger, making the integral larger by some factor. If g is only increased when the ball is at its maximum momentum, then p 0 will be unchanged and x 0 will be smaller, making the integral smaller by the same factor . However, if we increase g gradually, we should get a combination of these effects, and due to the symmetry in the Hamiltonian equations of motion, these effects will cancel keeping the integral constant.
Problem Loading...
Note Loading...
Set Loading...
Ignoring the simulation entirely.
First lets observe that the elevator increasing in acceleration results in the same relative moment between the elevator and the ball as if gravity were increasing at a rate of ϵ
Then let's look at the energy the ball has at any given point.
E = K E + P E
E = 2 1 m h ˙ 2 + m ( g + ϵ t ) h
Normally, the kinetic energy and potential energy changes cancel out, but in this case we have an additional term:
d t d E = m h ˙ h ¨ + m ( g + ϵ t ) h ˙ + m ϵ h
Since h ¨ = − ( g + ϵ t ) the first two terms cancel as usual and we get:
d t d E = m ϵ h
If we have the energy then we can find the peak height:
h p e a k = m ( g + ϵ t ) E
Looking at the time average of a parabola, the average height is exactly 3 2 of the peak height. When looking at these cubic curves it's a little off but accurate to 1 ppm. Thus:
h a v e = 3 2 h p e a k
Now if we use this h a v e value in our energy change equation we can create a solvable differential equation:
d t d E = m ϵ h a v e
d t d E = m ϵ 3 2 h p e a k
d t d E = ϵ 3 2 g + ϵ t E
∫ E 1 d E = ∫ 3 2 g + ϵ t ϵ d t
ln ( E ) = 3 2 ln ( C ( g + ϵ t ) )
E = C ( g + ϵ t ) 3 2
We know our initial energy:
E 0 = m g h 0
So we can find out constant C:
E = m g h 0 ( g g + ϵ t ) 3 2
Since we have our energy we can now find our peak height:
h p e a k = h 0 g + ϵ t g ( g g + ϵ t ) 3 2
h p e a k = h 0 ( g g + ϵ t ) − 3 1
Since we know ϵ t = 2 1 g we can now plug that in to get the final answer:
h p e a k = h 0 ( 2 3 ) − 3 1 = 0 . 8 7 3 5 8 h 0