/** This program determines the optimal launch angle to achieve the maximum range. */ use systemSolver2.frink symbolicMode[true] showApproximations[false] showDimensionName[false] // Solve the system symbolically. // h is height, v0 is initial velocity, t is time, // theta is angle above horizontal. launcher = new System[[h === h0 + Integrate[v0 sin[theta] - gravity t, t], h === 0, d === Integrate[v0 cos[theta], t]], ["gravity"]] println["Symbolic solutions:"] launcher.solveAll[] dsols = launcher.solveForValues["d", [["v0", 30 mph], ["h0", 50 feet sin[theta]]]] println[join["\n\n",dsols]] println[] // Print distances for each launch elevation. for theta = 0 degrees to 90 degrees step 1 degree for sol = eval[dsols] if (sol conforms length) && (sol > 0.01 ft) // Only positive, full solutions println[format[theta,"deg",3] + "\t" + format[sol,"ft",2]]