 module Minim where

 --тестовые функции
 f1 x =(1-x)*(1-x)
 f2 x =  (x-2)^2


 --функция поиска минимума методом "золотого сечения"
 findMin :: Float -> Float -> Float -> (Float -> Float) -> Float
 findMin eps a b f | (b-a<eps)         =  (a+b)/2
	           | ( f(a)  > f(x1) )&&
		     ( f(x1)  > f(x2) ) =  findMin eps x1 b  f
                   | ( f(x1) < f(x2) )&&
		     ( f(x2) < f(b) )   =  findMin eps a  x2 f
		   | True              =  findMin eps x1 x2 f
		  where
			x1=a+0.382*(b-a)
                        x2=a+0.618*(b-a)


 --пример findMin 0.00001 (-100) 150 f1