// Demonstration and test of solving systems of equations. use Solver.frink symbolicMode[true] showApproximations[false] // Ellipse equations. c = new Solver[[x^2/a^2 + y^2/b^2 === 1, e === sqrt[(a^2-b^2)/a^2], area===pi a b], ["pi"]] c.draw[] println["Ellipse:"] println[join["\n",c.solveAll[]]] args = [["x", 10], ["y", 9]] c.draw[] println[c.solveForSymbolic["e",args]] println[] s = new Solver[[x*y===8, x+y===4]] println["Simultaneous:"] println[join["\n",s.solveAll[]]] println[] println["x = " + s.solveFor["x",[]]] println["y = " + s.solveFor["y",[]]] println[] t = new Solver[[3a - 2b + c === 3, 4a + b - 3c === 10, a + 6b - 2c === 5, d === 4c - 10 + 2b]] //t.draw[] t.dump[] println[join["\n",t.solveAll[]]] println[] // Rump equation r = new Solver[[z === ((333 + 3/4) - x^2) y^6 + x^2 (11x^2 y^2 - 121 y^4 - 2) + (5 + 1/2) y^8 + x/(2y), x===77617, y===33096]] println["Rump:"] println[join["\n",r.solveAll[]]] println[] // Cohen, p. 11 /*cc = new Solver[[d0+d1+d2+d3+d4 === 1, d1+2d2+3d3+4d4 === 2(1-m), 3d0-d2+3d4 === 2g20 + g11, theta d0 + phi d1 - phi d3 - theta d4 === m, 2 theta d0 + phi d1 + phi d3 + 2 theta d4 === 2 g10], ["g20", "g11", "theta", "phi", "g10", "m"]] cc.draw[] //cc.dump[] println[join["\n",cc.solveAll[]]] println[]*/ // Expansion of the universe u = new Solver[[D0 hubbleconstant^2 e^(hubbleconstant t) === G m / d^2, d === D0, D0 === 4.3 ly], ["hubbleconstant", "ly", "G"]] println[join["\n",u.solveFor["t"]]] println[] // Circle z = new Solver[[d === 2 r, c === pi d, a === pi r^2, e===f, g===h], ["pi"]] println[join["\n",z.solveAll[]]] println[] // See http://answers.yahoo.com/question/index?qid=20091120001614AAInec3 // solve for pB and pAB // TODO: // eliminate pAprime and pAB, as those are what we want to solve for. bayes = new Solver[[pAB === pBA pA / pB, pA === 1 - pAprime, pAB === ( pBA pA ) / ( pBA pA + pBAprime pAprime )], []] //bayes.dump[] //bayes.draw[] println["Probability:"] println[join["\n", bayes.solveAll[]]] args = [["pA", 0.75], ["pBA", 0.8], ["pBAprime", 0.6]] println[] println["Symbolic:"] println["pB = " + bayes.solveForSymbolic["pB", args]] println["pAB = " + bayes.solveForSymbolic["pAB", args]] println[] println["Numeric:"] println["pB = " + bayes.solveFor["pB", args]] println["pAB = " + bayes.solveFor["pAB", args]] println[] // Cylinder. See http://ask.metafilter.com/59183/Calculate-length-of-a-pipe-from-the-volume-it-holds // Basically, we want the solution for "L" given "d" and "v". println["Pipe:"] cyl = new Solver[[d === 2 r, c === pi d, a === pi r^2, v === a L], ["pi"]] println[join["\n", cyl.solveAll[]]] println[] sols = cyl.solveFor["L"] println["Solutions for L:\n" + join["\n", sols]] println[] // Not fully specified case. args = [["d", 3/4 inch]] nsols = cyl.solveForSymbolic["L", args] println["Solutions for L (not fully specified, symbolic):\n" + join["\n",nsols]] println[] nsols = cyl.solveFor["L", args] println["Solutions for L (not fully specified):\n" + join["\n",nsols]] println[] // Plug in values and solve. args = [["d", 3/4 inch], ["v", 27 gallons]] nsols = cyl.solveFor["L", args] println["Solutions for L (fully specified):\n" + join["\n", nsols]] println[] // Phi phi = new Solver[[x+1===1/x]] println[join["\n", phi.solveAll[]]] println[] // Shweeb collision shweeb = new Solver[[v === a t, d === 1/2 a t^2, E === 1/2 m v^2, E === m gravity h], ["gravity"]] //shweeb.dump[] //shweeb.draw[] println["Shweeb:"] println[join["\n", shweeb.solveAll[]]] args = [["d", 1.2 m], ["v", 30 km/hr], ["gravity", gee]] println[join["\n", array[shweeb.solveFor["a", args]->"gee"]]] println[join["\n", shweeb.solveFor["h", args]->"ft"]] println[join["\n", shweeb.solveFor["t", args]]] println[] // Physical system // Suppose the stone is thrown at an angle of 35.0° below // the horizontal from the same building (h = 50.0 m) as in the example above. // If it strikes the ground 60.8 m away, find the following. (Hint: For part // (a), use the equation for the x-displacement to eliminate v0t from the // equation for the y-displacement.) // (a) the time of flight // (b) the initial speed // (c) the speed and angle of the velocity vector with respect to the // horizontal phys = new Solver[[vx === v0 cos[35 degrees], vy0 === v0 sin[35 degrees], h === h0 - 1/2 g t^2 - vy0 t, x === vx t], ["degrees"]] println["Ballistics:"] println[join["\n", phys.solveAll[]]] println[] args = [["x", 60.8 m], ["h0", 50 m], ["g", gravity], ["h", 0 m]] println[join["\n", eval[phys.solveFor["t", args]]]] println[] // Jupiter gravity jup = new Solver[[ E === m g h, E === 1/2 m v^2], ["g"]] println[join["\n", jup.solveAll[]]] println[] // Lorentz equation println["Relativity:"] lorentz = new Solver[[ gamma === 1/sqrt[1-v^2/c^2], dprime === d / gamma ], ["c"]] println[join["\n", lorentz.solveAll[]]] println[] args=[["d", 5 km], ["dprime", 1 m]] println[join["\n", lorentz.solveForSymbolic["v", args]]] println[] println[join["\n", lorentz.solveFor["v", args]]] println[] // Photon travel light = new Solver[[ f === c / lambda, omega === 2 pi f, f === 1/T, d === v t, phase === omega t], ["c", "pi"]] println["Photon:"] light.draw[] println[join["\n", light.solveAll[]]] println[] // Deep fryer fryer = new Solver[[ a === pi r^2, v === a h, d === 2 r ], ["pi"]] println["Fryer:"] println[join["\n", fryer.solveAll[]]] args = [["d", 10.5 in], ["h", 7.5 in]] println[fryer.solveFor["v",args]->"gallons"] println[] // Not-directly-connected simultaneous. ndc = new Solver[[a + e === 10, b + e === 20, c + e === 30, d + e===40, b * d === 90],[]] //ndc.draw[] println[join["\n", ndc.solveAll[]]] //ndc.draw[] println[]