Solving the Crocodile Math Problem in R
Posted on October 19, 2015
Using R to solve the crocodile math problem from the Scottish Higher Maths exam of May 2015.
Reading the Spanish newspaper La Vanguardia, I found a curious article about a math problem that S4 Scottish students (the equivalent of high school’s senior year) struggled with last May on their SQA Higher Maths test.
Here’s the problem.
The first thing to do is write a function containing the formula of \( T(x) \) the time taken for the crocodile to reach its prey:
Now let’s look at this function. I’ll choose an interval of (0, 20) for \( x \) since this represents the distance (0 meters, 20 meters).
Calculate the time taken if the crocodile does not travel on land. That means that the crocodile swims the entire 20 meters.
Calculate the time taken if the crocodile swims the shortest distance possible. Personally I think that this question is poorly written and/or bad designed. What does the “shortest distance possible” mean? Assuming that the shortest distance possible is 0 meters, then the time taken to swim 0 meters is:
Between these two extremes there is one value of \( x \) which minimizes the time taken. Find this value of \( x \) and hence calculate the minimum possible time. This is a typical calculus problem of minimizing a function. In this case the function to be minimized is the time taken. This implies calculating the derivative of \( T(x) \).
We can use the function
deriv() to compute the derivative of a simple expression (symbolically).
As you can tell from the output of
deriv(), the fifth line contains the desired derivative:
.grad[, "x"] <- 5 * (0.5 * (2 * x * .expr2^-0.5)) - 4
We can also obtain this derivative by using the function
D() and pass it the body of the function
croctime() like so:
Looking at the graphic of time, the curve has a minimum somewhere between 7 meters and 10 meters. We can evaluate the derivative
g() with some
x values to try to narrow down our search for the minimum value.
Aha! the minimum value is at a distance of 8 meters! To confirm that 8 is actually the root of the polynomial, we can use the function
multiroot() from the package
"rootSolve" by Karline Soetaert
There you go: the minimum taken time for the crocodile to catch the zebra is given when the crocodile swims 8 meters, and then walks the other 12 meters.