SkiJump.mw

Math 2240 The Ubiquitous Ski Jump Problem Project #1 

Image 

Thanks to Elizabeth Kehler for this plot -- It's my favorite! 

 

Also, a big "Thank you!" to Bryson Stalnaker for the excellent solution presented below. 

with(LinearAlgebra); -1 

 

with(plots); -1 

The Ski jump problem asks us to use a cubic polynomial to model a ski jump starting at a height of 100 ft. and ending at 10 ft., covering a horizontal distance of 120 ft., and with tangent lines of  0°  and 30° at the start and end respectively.  This problem lends itself to the procedure of polynomial curve fitting which can be used to fit a polynomial function to a set of data point in a plane.  It has been proven that having n number of distinct points there is precisely one polynomial of degree n-1 (or less) that fits the points. The polynomial for this problem will take the form: 

`:=`(f, proc (x) options operator, arrow; `+`(`*`(a, `*`(`^`(x, 3))), `*`(b, `*`(`^`(x, 2))), `*`(c, `*`(x)), d) end proc); 1 

proc (x) options operator, arrow; `+`(`*`(a, `*`(`^`(x, 3))), `*`(b, `*`(`^`(x, 2))), `*`(c, `*`(x)), d) end proc (1)
 

Since we are using a polynomial of the third degree to model the ski jump we will need at least four points to use polynomial curve fitting.  Drawing a simple representation or the ski-jump in the xy-plane helps to visualize this problem. 

Plot_2d 

The first two points (0,100) and (120,10) and the start and end of the jump.  Putting those points into the original polynomial we get the linear equations: 

`:=`(equation1, f(0) = 100); 1//when 0 is put in the polynomial for x and 100 in for f(x)or y it is solved to d=100 

d = 100 (2)
 

`:=`(equation2, f(120) = 10); 1//when 120 is put in the polynomial for x and 10 in for f(x) or y it leaves a linear equation. 

`+`(`*`(1728000, `*`(a)), `*`(14400, `*`(b)), `*`(120, `*`(c)), d) = 10 (3)
 

The second two points are solved for using some elementary calculus.  Taking the derivative of our original polynomial gives us: 

 

`:=`(polyderiv, diff(f(x), x)); 1//derivative of original polynomial 

`+`(`*`(3, `*`(a, `*`(`^`(x, 2)))), `*`(2, `*`(b, `*`(x))), c) (4)
 

`:=`(g, proc (x) options operator, arrow; `+`(`*`(3, `*`(a, `*`(`^`(x, 2)))), `*`(2, `*`(b, `*`(x))), c) end proc); 1 

proc (x) options operator, arrow; `+`(`*`(3, `*`(a, `*`(`^`(x, 2)))), `*`(2, `*`(b, `*`(x))), c) end proc (5)
 

The derivative is the slope of the tangent line at a point.  We know from the problem that the slope of the tangent at x=0 is 0 and using a little trig(30°60°90° triangle) we can find the slope of the tangent at x=120 to be `/`(1, `*`(sqrt(3))); -1Putting these values in the derivative yields: 

`:=`(equation3, g(0) = 0); 1//when 0 is put in the derivative for x and 0 in for y' it is solved to c=100 

c = 0 (6)
 

`:=`(equation4, g(120) = `/`(1, `*`(sqrt(3)))); 1//when 120 is put in the derivative for x and1/sqrt(3) in for y' it leaves a linear equation. 

`+`(`*`(43200, `*`(a)), `*`(240, `*`(b)), c) = `+`(`*`(`/`(1, 3), `*`(`^`(3, `/`(1, 2))))) (7)
 

Using the four equation we can set up a matrix and solve for a, b, c, d. 

`:=`(m, Matrix([[0, 0, 0, 1, 100], [1728000, 14400, 120, 1, 10], [0, 0, 1, 0, 0], [43200, 240, 1, 0, `/`(1, `*`(sqrt(3)))]])); 1 

Matrix(%id = 84344480) (8)
 

 

 

 

`:=`(m1, swaprow(m, 1, 2)); 1//Swap R1 with R2 

Matrix(%id = 99494988) (9)
 

`:=`(m2, swaprow(m1, 4, 2)); 1//swap R4 with R2 

Matrix(%id = 97351096) (10)
 

`:=`(m3, addrow(m2, 1, 2, `+`(`-`(`*`(43200, `/`(1, 1728000)))))); 1//(-43200/1728000)*R1+R2 

Matrix(%id = 99068444) (11)
 

`:=`(m4, mulrow(m3, 2, -`/`(1, 120))); 1//(-1/120)*R2 

Matrix(%id = 96443788) (12)
 

`:=`(m5, addrow(m4, 2, 1, -14400)); 1//(-14400*R2)+R1 

Matrix(%id = 99158524) (13)
 

The matrix is now in a solvable form. a, b, c, d can be found at this point by using backsolving, however if we keep reducing the matrix we can get it in a form so a, b, c, d can be read off more easily. 

`:=`(m6, mulrow(m5, 1, `/`(1, 1728000))); 1//(1/1728000)*R1 

Matrix(%id = 97965648) (14)
 

`:=`(m7, addrow(m6, 3, 2, -`/`(1, 60))); 1 //(-1/60)*R3+R2 

Matrix(%id = 86051664) (15)
 

`:=`(m8, addrow(m7, 3, 1, `/`(1, 14400))); 1 //(1/14400)*R3+R1 

Matrix(%id = 84476412) (16)
 

`:=`(m9, addrow(m8, 4, 2, -`/`(1, 4800))); 1 //(-1/4800)*R4+R2 

Matrix(%id = 83024596) (17)
 

`:=`(m10, addrow(m9, 4, 1, `/`(1, 864000))); 1 //(1/864000)*R4+R1 

Matrix(%id = 97832668) (18)
 

The matrix is now in reduced row echelon form and the answers for the coefficients of the polynomial can be directly read from the matrix. 

 

`:=`(d, 100); 1//Value of d 

100 (19)
 

 

`:=`(c, 0); 1 //Value of c 

0 (20)
 

`:=`(b, `+`(`-`(`*`(`/`(1, 360), `*`(sqrt(3)))), `-`(`/`(3, 160)))); 1 //Value of b 

`+`(`-`(`*`(`/`(1, 360), `*`(`^`(3, `/`(1, 2))))), `-`(`/`(3, 160))) (21)
 

`:=`(a, `+`(`*`(`/`(1, 43200), `*`(sqrt(3))), `/`(1, 9600))); 1 //value of c 

`+`(`*`(`/`(1, 43200), `*`(`^`(3, `/`(1, 2)))), `/`(1, 9600)) (22)
 

evalf(a); 1//decimal approximation of a 

0.1442604354e-3 (23)
 

evalf(b); 1 //decimal approximation of b 

-0.2356125224e-1 (24)
 

evalf(c); 1 //decimal approximation of c 

0. (25)
 

evalf(d); 1//decimal approximation of d 

100. (26)
 

 

`:=`(pp, eval(f(x), [a = a, b = b, c = c, d = d])); 1 //Equation for the polynomial That models our ski jump (the answer!!!!). 

`+`(`*`(`+`(`*`(`/`(1, 43200), `*`(`^`(3, `/`(1, 2)))), `/`(1, 9600)), `*`(`^`(x, 3))), `*`(`+`(`-`(`*`(`/`(1, 360), `*`(`^`(3, `/`(1, 2))))), `-`(`/`(3, 160))), `*`(`^`(x, 2))), 100) (27)
 

plot(pp, x = 0 .. 130, y = 0 .. 110); 1 //Graph of the polynomial that was obtained. 

Plot_2d