せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【Ruby】【アルゴリズム】二分木で方程式の解を見つける

学んだこと

lambda を使った関数渡し
Integer⇒Floatの変換


 

コード

function = lambda{|x| x**5 - 10*x**4 + 25*x**3 + 40*x**2 + 200*x -500}

def binary_search(_min, _max, epsilon, &func)
  _min = _min.to_f
  _max = _max.to_f
  mid = (_min + _max) /2
  executed = func.call(mid)
  return mid if executed.abs <= epsilon
  return binary_search(_min, mid, epsilon, &func) if executed > 0
  return binary_search(mid, _max, epsilon, &func) if executed < 0
end

print "x = " , answer = binary_search(1, 2, 0.1, &function) ,"\n"
print "f(x) = " , function.call(answer)