Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Simplify Challenging Software Problems with Rocket Science

listrophy
September 24, 2015

Simplify Challenging Software Problems with Rocket Science

Aerospace engineering is really no more magical than programming, and yet it's shrouded in such mystery and mysticism that practically no one bothers to study it. I'll show you how to apply concepts from rocket science to challenging software problems, allowing you to spend more time coming up with answers rather than interpreting inputs. We'll also learn to control the universe outside our glowing rectangles.

listrophy

September 24, 2015
Tweet

More Decks by listrophy

Other Decks in Programming

Transcript

  1. –Ashe Dryden “Whenever Brad is drinking, you wanna make sure

    you're sitting next to him, because instead of being obnoxious, he teaches you orbital mechanics.”
  2. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

    • Control and Respond to Real World Processes
  3. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

    • Control and Respond to Real World Processes
  4. Scalars & Collections Primitives & Arrays • x, y, z

    = 2, 3, 5 • Math.sqrt(x**2 + y**2 + z**2) • array.zip(other).map{|(i,j)| i+j} • [m[0][0]*v[0]+m[0][1]*v[1], m[1][0]*v[0]+m[1][1]*v[1]] Vectors & Matrices • vector = Vector[2, 3, 5] • vector.magnitude # or vector.r • vector_1 + vector_2 • matrix * vector

  5. Linear Transformations • Scale, Rotate, Skew, Translate (with a trick)

    • Common in CSS3 • Common in Kinetics & Kinematics
  6. Matrix Times Vector 1.  ⽷a    b⽹⽷x⽹      

     ⽸c    d⽺⽸y⽺   2.  [x    y]        ⽷a    b⽹        ⽸c    d⽺   3.  ⽷ax+by⽹        ⽸cx+dy⽺  
  7. Matrix Times Vector def matrix_times_vector(m, v) a, b = m[0]

    c, d = m[1] x, y = v [ a*x + b*y, c*x + d*y ] end require 'matrix' def matrix_times_vector(m, v) m * v end NOW WITH DIM CHECKS!
  8. Rotation Matrix R(θ)  =  ⽷cosθ  -­‐sinθ⽹        

           ⽸sinθ    cosθ⽺   R(30deg)*⟨1,0⟩  =  ⟨0.87,0.5⟩   R(90deg)*⟨1,0⟩  =  ⟨0,1⟩
  9. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

    • Control and Respond to Real World Processes
  10. Why Graphic Simulations? • Complex Systems • High Sensitivity •

    Pattern Recognition Required • Seeking “Good Enough”
  11. In Aerospace Engineering • Launch Vibration Testing • “Kick” tests

    • Thermal Equilibrium • Designing to Safety Factor
  12. In Aerospace Engineering • Launch Vibration Testing • “Kick” tests

    • Thermal Equilibrium • Designing to Safety Factor • N-Body Orbital Trajectories
  13. The n-Body Problem • Newton’s Laws + Gravity • Solved

    for N=2 • For N>2, “no general analytical solution,” except for special cases (e.g., Lagrangian Points)
  14. The n-Body Problem Gravity Force = x Newton’s 2nd Law

    Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity
  15. The n-Body Problem Gravity Force = x Newton’s 2nd Law

    Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity
  16. The n-Body Problem Gravity Force = x Newton’s 2nd Law

    Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration vnow = vprev + anow dt Position-Velocity xnow = xprev + vnow dt
  17. The n-Body Problem Gravity Force = x Newton’s 2nd Law

    acceleration = Force ÷ mass Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration vnow = vprev + anow dt Position-Velocity xnow = xprev + vnow dt
  18. Gravity Fnow = x Newton’s 2nd Law anow = Fnow

    ÷ m Newton’s 3rd Law (loop over each mass-pair) Velocity-Acceleration vnow = vprev + anow dt Position-Velocity xnow = xprev + vnow dt The n-Body Problem
  19. The n-Body Problem bodies.map do |body| [body, gravity(body, bodies-[body])] end.each

    do |(body, force)| accel = force / body.mass body.velocity += accel * dt body.position += body.velocity * dt end
  20. The n-Body Problem def gravity(body, others) others.reduce(Vector[0,0]) do |memo, other|

    offset = other.position - body.position memo + offset * G * body.mass * other.mass / offset.r**3 end end
  21. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

    • Control and Respond to Real World Processes
  22. The World is Complicated • “Assume no air resistance” •

    “Assume a frictionless surface” • “Assume perfect DC voltage” • “Assume no impact from general or special relativity”
  23. Our PID Controller loop do sleep 0.2 curr_time = Time.now

    dt = curr_time - prev_time p = error = desired - actual i = i + error * dt d = (error - prev_error)/dt setThrust(0.1*p + 0.003*i + 0.08*d) prev_error, prev_time = error, curr_time end
  24. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

    • Control and Respond to Real World Processes
  25. Photo Credits • “ABS/EUTELSAT-1 Launch” (Public Domain):
 http://www.spacex.com/media-gallery/detail/127081/4896 • “Beer

    Actor” (CC-BY):
 https://www.flickr.com/photos/cogdog/21127813750/ • “Up, up and away!” (CC-BY-SA):
 https://www.flickr.com/photos/kindercapes/5694816038 • “I’m confused” (CC-BY-SA):
 https://www.flickr.com/photos/doctabu/342220423 • “Cookie Monster Waiting” (no idea):
 https://www.google.com/search?q=cookie+monster+waiting • “Elmer Pump Heat Equation” (CC-BY-SA):
 https://commons.wikimedia.org/wiki/File:Elmer-pump-heatequation.png • “Owl Stuck” (CC-BY):
 https://www.flickr.com/photos/eben-frostey/7147015007