Thursday, February 22, 2018

HP Prime and Casio fx-5800P: The Two Train Problem (updated 2/26/2018)

HP Prime and Casio fx-5800P:  The Two Train Problem
(updated 2/28/2018)

Introduction

Have you ever heard the infamous problem “two trains are heading towards each other…”? 

Today’s blog will cover the following question:

Two trains are heading towards each other, on their own separate train track.  Each train has going at their own speed (velocity).  The trains start out a distance apart.

1. When will the trains cross over the same spot, and


2. Where will the trains cross over the same spot?




According to the diagram above, we have two trains, labeled Train I and Train II, each going at velocity v and acceleration a.  The trains start at distance D apart.  We will call the point where the trains cross over the same spot, x. 

Notes:

1. To make our lives easier, let’s assume that Train I starts at position 0, while Train II starts at position D. 

2. Train I is going at velocity v and acceleration a. 

3. Train II is going at velocity –v and acceleration –a. Why negative?  Train II is traveling in the opposite direction of Train I.

Setting up the Equations

The general distance equation is:  x = x0 + v*t + a*t^2, where x0 is the initial position.

We are going to cover two scenarios:  one where there is no acceleration, that is the velocity of both trains is constant.  The other is where acceleration is present for at least one of the trains.  Acceleration is assumed to be constant. 

In general the distance equations for both trains are:

Train I:  x =        v1*t + 1/2*a1*t^2
Train II: x = D  - v2*t -  1/2*a2*t^2

What this boils down to are a system of two equations, solving for both t and x.

Case 1:  Constant Velocity

The trains are moving at constant velocity in this scenario.  Which means there is no acceleration, and hence a1 = 0 and a2 = 0.  Then:

Train I:  x =        v1*t
Train II: x = D -  v2*t

Subtracting equations gives us:

0 = -D + v1*t – -v2*t
0 = -D + (v1 + v2)*t
D = (v1 + v2)*t
t = D/(v1 + v2)

Once t is known, we can use substitution to find x.  Train I’s equation is simpler, so:

x = v1*t

Case 2:  Non-Zero Acceleration

Start with:

Train I:  x =        v1*t + 1/2*a1*t^2
Train II: x = D  - v2*t -  1/2*a2*t^2

Subtracting the equations and solving for t yields:

0 = -D + v1*t – -v2*t + 1/2*a1*t^2 - -1/2*a2*t^2
0 = -D + (v1 + v2)*t + 1/2*(a1 + a2)*t^2

Using the quadratic equation:

t = ( -(v1+v2) ± √( (v1+v2)^2 + 4*D*1/2*(a1+a2)) ) / (2*1/2*(a1 + a2))
t = ( -(v1+v2) ± √( (v1+v2)^2 + 2*D*(a1+a2)) ) / (a1 + a2)


Note that there are two roots for t.  However, given the problem, negative time does not make sense.  We can eliminate the root for t that is obviously negative.

Hence, our solution for time in this problem is:

t = ( -(v1+v2) + √( (v1+v2)^2 + 2*D*(a1+a2)) ) / (a1 + a2)

Again, we are going to use the simpler equation for Train I to figure x:

x = v1*t + a1*t^2

The Program TRAINS

The program TRAINS will solve this problem.  Below are the codes for both the HP Prime and Casio fx-5800p.  Enter each as a positive value as the directions are accounted for in the program.

In the program, Train I is considered the left train, while Train II is considered the right train.

HP Prime Program: TRAINS

EXPORT TRAINS()
BEGIN
// 2018-02-22 EWS
// 2 trains problem

LOCAL d,t,x;
LOCAL v1,a1,v2,a2;

INPUT({d,v1,a1,v2,a2},
"Two Opposing Trains",
{"Dist:","L Vel:","L Acc:",
"R Vel:","R Acc:"},
{"Distance between trains",
"Left Train: Velocity",
"Left Train: Acceleration",
"Right Train: Velocity",
"Right Train: Acceleration"});

// calculation
IF a1≠0 OR a2≠0 THEN
t:=(−(v1+v2)+√((v1+v2)^2+
2*d*(a1+a2)))/(a1+a2);
x:=v1*t+1/2*a1*t^2;
ELSE
t:=d/(v1+v2);
x:=v1*t;
END;

// results
RETURN {"Time",t,
"Position",x};


END;

Casio fx-5800P Program: TRAINS

“EWS 2018-02-22”
“DISTANCE”?→D
“LEFT-VEL.”?→A
“LEFT-ACC.”?→E
“RIGHT-VEL.”?→B
“RIGHT-ACC.”?→F
If E≠0 Or F≠0
Then
(-(A+B)+√((A+B)^2
+2*D*(E+F)))÷
(E+F)→T
A*T+1/2*E*T^2→X
Else
D÷(A+B)→T
A*T→X
IfEnd
“TIME:”
T
“POSITION:”
X

Examples

Assume compatible units for each example.

Example 1:  Constant Velocity
Train I:  v1 = 40 (a1 = 0)
Train II: v2 = 35 (a2 = 0)
Distance:  300

Results:
Time:  4
Position:  160

Example 2:  Acceleration
Train I:  v1 = 40, a1 = 0.5
Train II: v2 = 35, a2 = 0.8
Distance:  300

Results:
Time:  3.87018761454
Position:  158.552092625

Thank you to Gianfranco Cazzaro, Dieter, and all who wrote to me pointing out the errors.  

Eddie

This is blog is property of Edward Shore, 2018.


3 comments:

  1. Please, correct this part of code
    (-(A+B)+√((E+F)^2
    +4*D*(E+F)))÷(2*
    (E+F))→T
    with the correct one
    (-(A+B)+√((A+B)^2
    +4*D*(E+F)))÷(2*
    (E+F))→T

    ReplyDelete
    Replies
    1. Thank you, Kleo. I will do so this morning.

      Eddie

      Delete

TI-84 Plus CE: Storing Names in a Concentrated String

TI-84 Plus CE: Storing Names in a Concentrated String  Introduction The program STRNAMES allows the user to store a list of names in a ...