Simplify Challenging Software Problems with Rocket Science

B4753ed732e72ff2568262c9387bbc4c?s=47 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.

B4753ed732e72ff2568262c9387bbc4c?s=128

listrophy

September 24, 2015
Tweet

Transcript

  1. Simplify Challenging Software Problems with Rocket Science @bendyworks Brad Grzesiak

    — @listrophy
  2. –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.”
  3. Heads up: 1 Animated GIF

  4. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

    • Control and Respond to Real World Processes
  6. we are not superheros

  7. 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

  8. “matrix” “times” “vector?”

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

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

     ⽸c    d⽺⽸y⽺   2.  [x    y]        ⽷a    b⽹        ⽸c    d⽺   3.  ⽷ax+by⽹        ⽸cx+dy⽺  
  11. 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!
  12. Rotation Matrix R(θ)  =  ⽷cosθ  -­‐sinθ⽹        

           ⽸sinθ    cosθ⽺   R(30deg)*⟨1,0⟩  =  ⟨0.87,0.5⟩   R(90deg)*⟨1,0⟩  =  ⟨0,1⟩
  13. Rotation Matrix R(-­‐30deg)*              

             =  
  14. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

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

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

    • Thermal Equilibrium • Designing to Safety Factor • N-Body Orbital Trajectories
  18. 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)
  19. The n-Body Problem Gravity Force = x Newton’s 2nd Law

    Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity
  20. Wait a minute. Derivatives?

  21. Formal Derivative

  22. Our Approximation

  23. Our Approximation

  24. Our Approximation

  25. The n-Body Problem Gravity Force = x Newton’s 2nd Law

    Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. (demo)

  32. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

    “Assume a frictionless surface” • “Assume perfect DC voltage” • “Assume no impact from general or special relativity”
  34. You simply cannot predefine a specific solution to a problem

    that is perturbed by the real world
  35. –Helmuth von Moltke the Elder “No battle plan ever survives

    contact with the enemy.”
  36. The Answer: React

  37. Feedback Controller

  38. Feedback Controller

  39. Feedback Controller

  40. PID Controller

  41. Controller P I D roportional ntegral erivative

  42. Feedback Controller diff == error

  43. Proportional P  =  error  =  desired  -­‐  actual

  44. Derivative D  =  (error  -­‐  prev_error)/dt

  45. Integral I  =  I  +  error*dt

  46. 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
  47. (demo)

  48. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

    • Control and Respond to Real World Processes
  49. 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

  50. Thank You! Brad Grzesiak brad@bendyworks.com @listrophy