1.2k

# 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)

October 17, 2015

## Transcript

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

4. None
5. None
6. None
7. None
8. ### Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

• Control and Respond to Real World Processes

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*v+m*v, m*v+m*v] Vectors & Matrices • vector = Vector[2, 3, 5] • vector.magnitude # or vector.r • vector_1 + vector_2 • matrix * vector

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⽺

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⽺
18. ### Matrix Times Vector 1.  ⽷a    b⽹⽷x⽹

⽸c    d⽺⽸y⽺   2.  ［x    y］        ⽷a    b⽹        ⽸c    d⽺   3.  ⽷ax+by⽹        ⽸cx+dy⽺
19. ### Matrix Times Vector def matrix_times_vector(m, v) a, b = m

c, d = m x, y = v [ a*x + b*y, c*x + d*y ] end require 'matrix' def matrix_times_vector(m, v) m * v end
20. ### Matrix Times Vector def matrix_times_vector(m, v) a, b = m

c, d = m 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!

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

⽸0  1⽺
28. ### Identity Transform I      =⽷1  0⽹

⽸0  1⽺  I*v  =⽷1  0⽹⽷1⽹           ⽸0  1⽺⽸3⽺
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)⽺
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⽺

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

⽸0  s⽺  ⽸0  2⽺
33. ### Scale Transform S      =⽷s  0⽹=⽷2  0⽹

⽸0  s⽺  ⽸0  2⽺  S*v  =⽷2  0⽹⽷1⽹           ⽸0  2⽺⽸3⽺
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)⽺
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⽺

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

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

⽸  0  1⽺  H*v  =⽷-­‐1  0⽹⽷1⽹           ⽸  0  1⽺⽸3⽺
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)⽺
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⽺

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

⽸0        1⽺
43. ### SkewX Transform X(θ)          =⽷1  tanθ⽹

⽸0        1⽺  X(30°)*v  =⽷1  .58⽹⽷1⽹                     ⽸0      1⽺⽸3⽺
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)⽺
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      ⽺
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      ⽺
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      ⽺

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

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

⽸sinθ    cosθ⽺  R(90°)*v  =⽷0  -­‐1⽹⽷1⽹                     ⽸1    0⽺⽸3⽺
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)⽺
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⽺
53. ### Rotation Transform R(30°)*

=
54. ### Rotation Transform R(30°)*

=
55. ### Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

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

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

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

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

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

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

• Thermal Equilibrium • Designing to Safety Factor • N-Body Orbital Trajectories
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)
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

= 1 hour

= 1 minute

= 1 second

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

= 1 millisecond

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

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

km/hr 0 km/hr 1 minute later

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

recent) acceleration = [velocity(now) - velocity(recent)] / (now - recent)
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)
90. ### Our Approximation position(now) = position(recent) + velocity * (now -

recent) velocity(now) = velocity(recent) + acceleration * (now - recent)
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
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
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
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
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
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

98. ### Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

• Control and Respond to Real World Processes
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”
101. ### You simply cannot predeﬁne a speciﬁc solution to a problem

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

contact with the enemy.”

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

116. ### Agenda • Reduce Cognitive Load • Visualize Simulations with Graphics

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

• Control and Respond to Real World Processes
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.ﬂickr.com/photos/cogdog/ 21127813750/ • “Up, up and away!” (CC-BY-SA):  https://www.ﬂickr.com/photos/kindercapes/ 5694816038 • “I’m confused” (CC-BY-SA):  https://www.ﬂickr.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.ﬂickr.com/photos/eben-frostey/ 7147015007 • Car (Public Domain):  https://thenounproject.com/search/?q=car&i=13094 • Curing Sausage (Used with permission):  https://www.ﬂickr.com/photos/aaronp/7532277486/