function [a, b, k, n] = fmin_bisection(fun, alpha, beta, epsilon, lambda) % Bisection method for finding the local minimum of a function. % % fun: The objective function % alpha: (number) The starting point of the interval in which we seek % for minimum % beta: (number) The ending point of the interval in which we seek % for minimum % epsilon: (number) The epsilon value (distance from midpoint) % lambda: (number) The lambda value (accuracy) % % return: % a: (vector) Starting points of the interval for each iteration % b: (vector) Ending points of the interval for each iteration % k: (number) The number of iterations % n: (number) The calls of objective function fun_expr % % Error checking if alpha > beta || 2*epsilon >= lambda || lambda <= 0 error ('Input criteria not met') end % Init a = alpha; b = beta; n = 0; k=1; while b(k) - a(k) > lambda % bisect [a,b] mid = (a(k) + b(k)) / 2; x_1 = mid - epsilon; x_2 = mid + epsilon; % set new search interval k = k + 1; if fun(x_1) < fun(x_2) a(k) = a(k-1); b(k) = x_2; else a(k) = x_1; b(k) = b(k-1); end end end