Skip to content

Instantly share code, notes, and snippets.

@gysel
Created August 4, 2012 12:45
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save gysel/3257429 to your computer and use it in GitHub Desktop.
Save gysel/3257429 to your computer and use it in GitHub Desktop.
Simple Integral implementation in Ruby
require 'bigdecimal'
def integrate (a, b, n)
a = a.to_f; b = b.to_f; n = n.to_i
result = 0.0
dx = (b - a) / n
dx_half = dx / 2
for i in 0 ... n
result += yield a + (i * dx)
end
result * dx
end
def integrate_trapezoid (a, b, n)
a = a.to_f; b = b.to_f; n = n.to_i
result = 0.0
result += ( yield(a) + yield(b) ) / 2
dx = (b - a) / n
for i in 1 ... n
result += yield a + (i * dx)
end
result * dx
end
for n in 1..7
a = -5
b = 5
before = Time.now
integral = integrate(a,b,10 ** n) do |i|
Math.sin i
end
time_taken = 1000.0 * (Time.now - before)
before = Time.now
integral_trapezoid = integrate_trapezoid(a,b,10 ** n) do |i|
Math.sin i
end
time_taken_trapezoid = 1000.0 * (Time.now - before)
puts "n=10^" + n.to_s + " | " + integral.to_s + " (" + time_taken.to_s + "ms)"
puts " " + integral_trapezoid.to_s + " (" + time_taken_trapezoid.to_s + "ms)"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment