Skip to content

Instantly share code, notes, and snippets.

@estebanz01
Created May 3, 2019 20:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save estebanz01/6a682a3543491af20a041e5485073d29 to your computer and use it in GitHub Desktop.
Save estebanz01/6a682a3543491af20a041e5485073d29 to your computer and use it in GitHub Desktop.
Implementation of the composite rules used to approximate defined integrals, written in ruby.
def x_sub(index, lower, h)
x_k = lower + (index * h)
end
def booles_rule(lower, upper, &block)
h = (upper - lower) / 4.0
sum = 0
sum += 7 * yield(lower)
sum += 32 * yield(x_sub(1, lower, h))
sum += 12 * yield(x_sub(2, lower, h))
sum += 32 * yield(x_sub(3, lower, h))
sum += 7 * yield(upper)
(2 / 45.0) * h * sum
end
def composite_booles_rule(lower, upper, n, &block)
h = (upper - lower) / (4 * n).to_f
sum = 0
(1..n).each do |i|
sum += 7 * yield(x_sub(4 * i - 4, lower, h))
sum += 32 * yield(x_sub(4 * i - 3, lower, h))
sum += 12 * yield(x_sub(4 * i - 2, lower, h))
sum += 32 * yield(x_sub(4 * i - 1, lower, h))
sum += 7 * yield(x_sub(4 * i, lower, h))
end
sum * ((2 * h)/45.0)
end
def composite_3_8_simpson(lower, upper, n, &block)
h = (upper - lower) / (3 * n).to_f
sum = 0
(1..n).each do |i|
sum += yield(x_sub(3 * i - 3, lower, h))
sum += 3 * yield(x_sub(3 * i - 2, lower, h))
sum += 3 * yield(x_sub(3 * i - 1, lower, h))
sum += yield(x_sub(3 * i, lower, h))
end
((3 * h)/8.0) * sum
end
def composite_simpsons_rule(lower, upper, n, &block)
h = (upper - lower) / (2 * n).to_f
sum = 0
(1..n).each do |i|
sum += yield(x_sub(2 * i - 2, lower, h))
sum += 4 * yield(x_sub(2 * i - 1, lower, h))
sum += yield(x_sub(2 * i, lower, h))
end
(h / 3.0) * sum
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment