# min_search.py note: smaller h did not give better result # smaller t, tolerance, if it converges, better # searches xi to +infinity def f(x): return (x-5)**4 # minimum at x=5 def optMinSearch(f, xi, h, t=1.0e-9): ssx = xi x = xi fx = f(x) sx = x x += h fxn = f(x) n = 0 while abs(fxn-fx) > t : while fx > fxn: n += 1 fx = fxn ssx = sx sx = x x += h fxn = f(x) xx = x h = h / 2 x = ssx fx = f(x) sx = x x += h fxn = f(x) n += 1 return x, fxn, n, sx, xx h = 0.1 print "min of (x-5)**4, h=", h xmin, fmin, n, sx, xx = optMinSearch(f, -2.0, h) print "xmin=",xmin print "fmin=",fmin print "n=", n, ", sx=", sx, ", xx=", xx print " " h = 0.01 print "min of (x-5)**4, h=", h xmin, fmin, n, sx, xx = optMinSearch(f, -2.0, h) print "xmin=",xmin print "fmin=",fmin print "n=", n, ", sx=", sx, ", xx=", xx print " " h = 2.0 print "min of (x-5)**4, h=", h xmin, fmin, n, sx, xx = optMinSearch(f, -2.0, h, 1.0e-15) print "xmin=",xmin print "fmin=",fmin print "n=", n, ", sx=", sx, ", xx=", xx print " "