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. Simplify Challenging
    Software Problems with
    Rocket Science
    @bendyworks
    Brad Grzesiak — @listrophy

    View Slide

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

    View Slide

  3. Heads up:
    1 Shaky Movie &
    1 Animated GIF

    View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. View Slide

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

    View Slide

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

    View Slide

  10. we
    are
    not
    superheros

    View Slide

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


    View Slide

  12. “matrix”
    “times”
    “vector?”

    View Slide

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

    View Slide

  14. Vector Example

    View Slide

  15. Vector Example
    ⟨2,0⟩

    View Slide

  16. Vector Example
    ⟨2,0⟩
    ⟨1,3⟩

    View Slide

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

    View Slide

  18. Matrix Times Vector
    1.  ⽷a    b⽹⽷x⽹  
         ⽸c    d⽺⽸y⽺  
    2.  [x    y]  
         ⽷a    b⽹  
         ⽸c    d⽺  
    3.  ⽷ax+by⽹  
         ⽸cx+dy⽺  

    View Slide

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

    View Slide

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

    View Slide

  21. Linear Transformation
    Examples

    View Slide

  22. Hooke’s Law
    for Anisotropic Materials
    σ  =  c  *  ε

    View Slide

  23. 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ε₁₂⽺

    View Slide

  24. 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ε₁₂⽺

    View Slide

  25. Our Vector
    ⟨1,3⟩

    View Slide

  26. Identity Transform

    View Slide

  27. Identity Transform
    I      =⽷1  0⽹

             ⽸0  1⽺


    View Slide

  28. Identity Transform
    I      =⽷1  0⽹

             ⽸0  1⽺

    I*v  =⽷1  0⽹⽷1⽹

             ⽸0  1⽺⽸3⽺


    View Slide

  29. 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)⽺


    View Slide

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

    View Slide

  31. Scale Transform

    View Slide

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

             ⽸0  s⽺  ⽸0  2⽺


    View Slide

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

             ⽸0  s⽺  ⽸0  2⽺

    S*v  =⽷2  0⽹⽷1⽹

             ⽸0  2⽺⽸3⽺


    View Slide

  34. 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)⽺


    View Slide

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

    View Slide

  36. Flip Horizontal Transform

    View Slide

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

             ⽸  0  1⽺


    View Slide

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

             ⽸  0  1⽺

    H*v  =⽷-­‐1  0⽹⽷1⽹

             ⽸  0  1⽺⽸3⽺


    View Slide

  39. 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)⽺


    View Slide

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

    View Slide

  41. SkewX Transform

    View Slide

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

                       ⽸0        1⽺


    View Slide

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

                       ⽸0        1⽺

    X(30°)*v  =⽷1  .58⽹⽷1⽹

                       ⽸0      1⽺⽸3⽺


    View Slide

  44. 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)⽺


    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. Rotation Transform

    View Slide

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

                       ⽸sinθ    cosθ⽺


    View Slide

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

                       ⽸sinθ    cosθ⽺

    R(90°)*v  =⽷0  -­‐1⽹⽷1⽹

                       ⽸1    0⽺⽸3⽺


    View Slide

  51. 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)⽺


    View Slide

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

    View Slide

  53. Rotation Transform
    R(30°)*                          =  

    View Slide

  54. Rotation Transform
    R(30°)*                          =  

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  62. In Aerospace Engineering
    • Launch Vibration Testing
    • “Kick” tests
    • Thermal Equilibrium
    • Designing to Safety Factor
    • N-Body Orbital Trajectories

    View Slide

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

    View Slide

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

    View Slide

  65. Wait a minute.
    Derivatives?

    View Slide

  66. Velocity = Derivative of Position
    0 km 60 km

    View Slide

  67. Velocity = Derivative of Position
    0 km 60 km
    t = 1 hour

    View Slide

  68. Velocity = Derivative of Position
    0 km 1 km

    View Slide

  69. Velocity = Derivative of Position
    0 km 1 km
    t = 1 minute

    View Slide

  70. Velocity = Derivative of Position
    0 km 16.67 meters

    View Slide

  71. Velocity = Derivative of Position
    0 km 16.67 meters
    t = 1 second

    View Slide

  72. Velocity = Derivative of Position
    0 km 1.667 centimeters

    View Slide

  73. Velocity = Derivative of Position
    0 km 1.667 centimeters
    t = 1 millisecond

    View Slide

  74. Velocity = Derivative of Position
    now 1 hour later
    60 km
    0 km

    View Slide

  75. Velocity = Derivative of Position
    now 1 hour later
    60 km/hr
    0 km/hr

    View Slide

  76. Velocity = Derivative of Position
    now 1 hour later
    60 km/hr
    0 km/hr
    1 minute later

    View Slide

  77. Formal Derivative

    View Slide

  78. Derivative Applied

    View Slide

  79. Derivative Applied

    View Slide

  80. Derivative Applied

    View Slide

  81. Derivative Applied

    View Slide

  82. Derivative Applied

    View Slide

  83. Dimensional Analysis,
    or “Fixing Units”

    View Slide

  84. Dimensional Analysis,
    or “Fixing Units”

    View Slide

  85. Our Approximation

    View Slide

  86. Our Approximation

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  90. Our Approximation
    position(now) = position(recent) + velocity * (now - recent)
    velocity(now) = velocity(recent) + acceleration * (now - recent)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  97. (demo)

    View Slide

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

    View Slide

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

    View Slide

  100. The World is Complicated
    • “Assume no air resistance”
    • “Assume a frictionless surface”
    • “Assume perfect DC voltage”
    • “Assume no impact from general or special
    relativity”

    View Slide

  101. You simply cannot predefine a
    specific solution to a problem that
    is perturbed by the real world

    View Slide

  102. –Helmuth von Moltke the Elder
    “No battle plan ever survives
    contact with the enemy.”

    View Slide

  103. The Answer: React

    View Slide

  104. Feedback Controller

    View Slide

  105. Feedback Controller

    View Slide

  106. Feedback Controller

    View Slide

  107. PID Controller

    View Slide

  108. Controller
    P
    I
    D
    roportional
    ntegral
    erivative

    View Slide

  109. Feedback Controller

    View Slide

  110. Feedback Controller
    diff == error

    View Slide

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

    View Slide

  112. Derivative
    D  =  (error_now  -­‐  error_recent)/dt

    View Slide

  113. Integral
    I  +=  error*dt

    View Slide

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

    View Slide

  115. (demo)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  119. Thank You!
    Brad Grzesiak
    [email protected]
    @listrophy
    gitlab.com/listrophy

    View Slide