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

Simplify Challenging Software Problems with Rocket Science

listrophy
October 17, 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. (40 minute version presented at EuRuKo 2015)

listrophy

October 17, 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. Vector • Underlying implementation: Array • Usually Numeric, but really

    anything • Native operations are different (c.f. addition) • Denoted by: ⟨x,y⟩ or x or x or or ⽷x⽹   ⽸y⽺   ⽷2⽹   ⽸0⽺  
  6. Matrices, or “Linear Transformations” • Structurally like a 2D Array

    • Used to Scale, Rotate, Skew, Perspective, Translate • Common in CSS3 • Useful for 2D & 3D graphics • Common in Kinetics & Material Mechanics • Denoted by M or M or or ⽷a  b⽹   ⽸c  d⽺   ⽷1  4⽹   ⽸9  0⽺  
  7. Matrix Times Vector 1.  ⽷a    b⽹⽷x⽹      

     ⽸c    d⽺⽸y⽺   2.  [x    y]        ⽷a    b⽹        ⽸c    d⽺   3.  ⽷ax+by⽹        ⽸cx+dy⽺  
  8. 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
  9. 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!
  10. Hooke’s Law for Anisotropic Materials ⽷σ₁₁⽹  ⽷C₁₁  C₁₂  C₁₃  C₁₄

     C₁₅  C₁₆⽹⽷  ε₁₁⽹
 ⾇σ₂₂⾇  ⾇C₁₂  C₂₂  C₂₃  C₂₄  C₂₅  C₂₆⾇⾇  ε₂₂⾇   ⾇σ₃₃⾇=⾇C₁₃  C₂₃  C₃₃  C₃₄  C₃₅  C₃₆⾇⾇  ε₃₃⾇   ⾇σ₂₃⾇  ⾇C₁₄  C₂₄  C₃₄  C₄₄  C₄₅  C₄₆⾇⾇2ε₂₃⾇   ⾇σ₁₃⾇  ⾇C₁₅  C₂₅  C₃₅  C₄₅  C₅₅  C₅₆⾇⾇2ε₁₃⾇   ⽸σ₁₂⽺  ⽸C₁₆  C₂₆  C₃₆  C₄₆  C₅₆  C₆₆⽺⽸2ε₁₂⽺
  11. Hooke’s Law for Anisotropic Materials ⽷σ₁₁⽹  ⽷C₁₁  C₁₂  C₁₃  C₁₄

     C₁₅  C₁₆⽹⽷  ε₁₁⽹
 ⾇σ₂₂⾇  ⾇C₁₂  C₂₂  C₂₃  C₂₄  C₂₅  C₂₆⾇⾇  ε₂₂⾇   ⾇σ₃₃⾇=⾇C₁₃  C₂₃  C₃₃  C₃₄  C₃₅  C₃₆⾇⾇  ε₃₃⾇   ⾇σ₂₃⾇  ⾇C₁₄  C₂₄  C₃₄  C₄₄  C₄₅  C₄₆⾇⾇2ε₂₃⾇   ⾇σ₁₃⾇  ⾇C₁₅  C₂₅  C₃₅  C₄₅  C₅₅  C₅₆⾇⾇2ε₁₃⾇   ⽸σ₁₂⽺  ⽸C₁₆  C₂₆  C₃₆  C₄₆  C₅₆  C₆₆⽺⽸2ε₁₂⽺
  12. Identity Transform I      =⽷1  0⽹
      

       ⽸0  1⽺
 I*v  =⽷1  0⽹⽷1⽹
          ⽸0  1⽺⽸3⽺

  13. Identity Transform I      =⽷1  0⽹
      

       ⽸0  1⽺
 I*v  =⽷1  0⽹⽷1⽹
          ⽸0  1⽺⽸3⽺
 I*v  =⽷(1*1)  +  (0*3)⽹
          ⽸(0*1)  +  (1*3)⽺

  14. Identity Transform I      =⽷1  0⽹
      

       ⽸0  1⽺
 I*v  =⽷1  0⽹⽷1⽹
          ⽸0  1⽺⽸3⽺
 I*v  =⽷(1*1)  +  (0*3)⽹
          ⽸(0*1)  +  (1*3)⽺
 I*v  =⽷1⽹
          ⽸3⽺
  15. Scale Transform S      =⽷s  0⽹=⽷2  0⽹
    

         ⽸0  s⽺  ⽸0  2⽺
 S*v  =⽷2  0⽹⽷1⽹
          ⽸0  2⽺⽸3⽺

  16. Scale Transform S      =⽷s  0⽹=⽷2  0⽹
    

         ⽸0  s⽺  ⽸0  2⽺
 S*v  =⽷2  0⽹⽷1⽹
          ⽸0  2⽺⽸3⽺
 S*v  =⽷(2*1)  +  (0*3)⽹
          ⽸(0*1)  +  (2*3)⽺

  17. Scale Transform S      =⽷s  0⽹=⽷2  0⽹
    

         ⽸0  s⽺  ⽸0  2⽺
 S*v  =⽷2  0⽹⽷1⽹
          ⽸0  2⽺⽸3⽺
 S*v  =⽷(2*1)  +  (0*3)⽹
          ⽸(0*1)  +  (2*3)⽺
 S*v  =⽷2⽹
          ⽸6⽺
  18. Flip Horizontal Transform H      =⽷-­‐1  0⽹
    

         ⽸  0  1⽺
 H*v  =⽷-­‐1  0⽹⽷1⽹
          ⽸  0  1⽺⽸3⽺

  19. Flip Horizontal Transform H      =⽷-­‐1  0⽹
    

         ⽸  0  1⽺
 H*v  =⽷-­‐1  0⽹⽷1⽹
          ⽸  0  1⽺⽸3⽺
 H*v  =⽷(-­‐1*1)  +  (0*3)⽹
          ⽸(  0*1)  +  (1*3)⽺

  20. Flip Horizontal Transform H      =⽷-­‐1  0⽹
    

         ⽸  0  1⽺
 H*v  =⽷-­‐1  0⽹⽷1⽹
          ⽸  0  1⽺⽸3⽺
 H*v  =⽷(-­‐1*1)  +  (0*3)⽹
          ⽸(  0*1)  +  (1*3)⽺
 H*v  =⽷-­‐1⽹
          ⽸  3⽺
  21. SkewX Transform X(θ)          =⽷1  tanθ⽹
  

                     ⽸0        1⽺

  22. SkewX Transform X(θ)          =⽷1  tanθ⽹
  

                     ⽸0        1⽺
 X(30°)*v  =⽷1  .58⽹⽷1⽹
                    ⽸0      1⽺⽸3⽺

  23. SkewX Transform X(θ)          =⽷1  tanθ⽹
  

                     ⽸0        1⽺
 X(30°)*v  =⽷1  .58⽹⽷1⽹
                    ⽸0      1⽺⽸3⽺
 X(30°)*v  =⽷(1*1)  +  (.58*3)⽹
                    ⽸(0*1)  +  (    1*3)⽺

  24. SkewX Transform X(θ)          =⽷1  tanθ⽹
  

                     ⽸0        1⽺
 X(30°)*v  =⽷1  .58⽹⽷1⽹
                    ⽸0      1⽺⽸3⽺
 X(30°)*v  =⽷(1*1)  +  (.58*3)⽹
                    ⽸(0*1)  +  (    1*3)⽺
 X(30°)*v  =⽷2.73⽹
                    ⽸3      ⽺
  25. SkewX Transform X(θ)          =⽷1  tanθ⽹
  

                     ⽸0        1⽺
 X(30°)*v  =⽷1  .58⽹⽷1⽹
                    ⽸0      1⽺⽸3⽺
 X(30°)*v  =⽷(1*1)  +  (.58*3)⽹
                    ⽸(0*1)  +  (    1*3)⽺
 X(30°)*v  =⽷2.73⽹
                    ⽸3      ⽺
  26. SkewX Transform X(θ)          =⽷1  tanθ⽹
  

                     ⽸0        1⽺
 X(30°)*v  =⽷1  .58⽹⽷1⽹
                    ⽸0      1⽺⽸3⽺
 X(30°)*v  =⽷(1*1)  +  (.58*3)⽹
                    ⽸(0*1)  +  (    1*3)⽺
 X(30°)*v  =⽷2.73⽹
                    ⽸3      ⽺
  27. Rotation Transform R(θ)          =⽷cosθ  -­‐sinθ⽹
  

                     ⽸sinθ    cosθ⽺

  28. Rotation Transform R(θ)          =⽷cosθ  -­‐sinθ⽹
  

                     ⽸sinθ    cosθ⽺
 R(90°)*v  =⽷0  -­‐1⽹⽷1⽹
                    ⽸1    0⽺⽸3⽺

  29. Rotation Transform R(θ)          =⽷cosθ  -­‐sinθ⽹
  

                     ⽸sinθ    cosθ⽺
 R(90°)*v  =⽷0  -­‐1⽹⽷1⽹
                    ⽸1    0⽺⽸3⽺
 R(90°)*v  =⽷(0*1)  +  (-­‐1*3)⽹
                    ⽸(1*1)  +  (  0*3)⽺

  30. Rotation Transform R(θ)          =⽷cosθ  -­‐sinθ⽹
  

                     ⽸sinθ    cosθ⽺
 R(90°)*v  =⽷0  -­‐1⽹⽷1⽹
                    ⽸1    0⽺⽸3⽺
 R(90°)*v  =⽷(0*1)  +  (-­‐1*3)⽹
                    ⽸(1*1)  +  (  0*3)⽺
 R(90°)*v  =⽷-­‐3⽹
                    ⽸  1⽺
  31. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

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

    Pattern Recognition Required • Seeking “Good Enough”
  34. Why Graphic Simulations? • Complex Systems • High Sensitivity •

    Pattern Recognition Required • Seeking “Good Enough”
  35. Why Graphic Simulations? • Complex Systems • High Sensitivity •

    Pattern Recognition Required • Seeking “Good Enough” Tests?
  36. Why Graphic Simulations? • Complex Systems • High Sensitivity •

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

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

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

    Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity
  41. Our Approximation velocity = [position(now) - position(recent)] / (now -

    recent) acceleration = [velocity(now) - velocity(recent)] / (now - recent)
  42. Our Approximation velocity = [position(now) - position(recent)] / (now -

    recent) acceleration = [velocity(now) - velocity(recent)] / (now - recent) position(now) = position(recent) + velocity * (now - recent) velocity(now) = velocity(recent) + acceleration * (now - recent)
  43. Our Approximation position(now) = position(recent) + velocity * (now -

    recent) velocity(now) = velocity(recent) + acceleration * (now - recent)
  44. The n-Body Problem Gravity Force = x Newton’s 2nd Law

    Force = mass ⨉ acceleration Newton’s 3rd Law Force₁ = -Force₂ Velocity-Acceleration Position-Velocity
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

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

    “Assume a frictionless surface” • “Assume perfect DC voltage” • “Assume no impact from general or special relativity”
  53. 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
  54. Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

    • Control and Respond to Real World Processes
  56. Photo Credits • “LPE II” (Bradley Grzesiak) • “Zero G

    Robot” (Bradley Grzesiak) • “Outredgeous Lettuce” (Public Domain):
 https://www.nasa.gov/mission_pages/station/ research/news/meals_ready_to_eat/ • “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 • Car (Public Domain):
 https://thenounproject.com/search/?q=car&i=13094 • Curing Sausage (Used with permission):
 https://www.flickr.com/photos/aaronp/7532277486/