Home | Ruby | Modeling Gravity with Ruby |     Share This Page

Listing: numerical_solution.rb


Click here to download original file.

#!/usr/bin/ruby -w
=begin
A numerical model for:
p(0) = 0
p'(0) = v
p''(t) = -a
=end
def numeric_solve(dt,v,a)
   t = 0
   p = 0
   max = 0
   while p >= 0
      v += a * dt
      p += v * dt
      t += dt
      max = p if p > max
   end
   return t,max
end
def pretty_print(*a)
   while a.size > 0 do
      printf("%s: %9.6f ",a.shift,a.shift)
   end
   puts ""
end
1.upto(6) do |n|
   # starting time
   st = Time.new
   # think: 10 raised to the -n
   dt = 10.0**-n
   # solve
   t,max = numeric_solve(dt,19.6,-9.8)
   # get elapsed time
   et = Time.new - st
   # compute result error
   error = (1 - (19.6/max)) * 100.0
   pretty_print("dt",dt,"height",max,"error %",error,"runtime",et)
end
    

Home | Ruby | Modeling Gravity with Ruby |     Share This Page