module GoldenSectionSearch

Constants

GOLDEN_RATIO
VERSION

Public Class Methods

find_maximum(function, left_value, right_value, tolerance = 1.0e-5) click to toggle source
# File lib/golden_section_search.rb, line 22
def self.find_maximum(function, left_value, right_value, tolerance = 1.0e-5)
  middle_left_value = right_value - (right_value - left_value) / GOLDEN_RATIO
  middle_right_value = left_value + (right_value - left_value) / GOLDEN_RATIO
  while (right_value - left_value).abs > tolerance
    if function.call(middle_left_value) > function.call(middle_right_value)
      right_value = middle_right_value
    else
      left_value = middle_left_value
    end
    middle_left_value = right_value - (right_value - left_value) / GOLDEN_RATIO
    middle_right_value = left_value + (right_value - left_value) / GOLDEN_RATIO
  end

  (left_value + right_value) / 2
end
find_minimum(function, left_value, right_value, tolerance = 1.0e-5) click to toggle source
# File lib/golden_section_search.rb, line 6
def self.find_minimum(function, left_value, right_value, tolerance = 1.0e-5)
  middle_left_value = right_value - (right_value - left_value) / GOLDEN_RATIO
  middle_right_value = left_value + (right_value - left_value) / GOLDEN_RATIO
  while (right_value - left_value).abs > tolerance
    if function.call(middle_left_value) < function.call(middle_right_value)
      right_value = middle_right_value
    else
      left_value = middle_left_value
    end
    middle_left_value = right_value - (right_value - left_value) / GOLDEN_RATIO
    middle_right_value = left_value + (right_value - left_value) / GOLDEN_RATIO
  end

  (left_value + right_value) / 2
end