- function [a, b, k, n] = min_bisection(fun_expr, alpha, beta, epsilon, lambda)
- % Bisection method for finding the local minimum of a function.
- %
- % fun_expr: (symbolic expression over x) The symbolic expression of 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;
- fun = matlabFunction(fun_expr);
-
- % wrapper call count function
- function r = count_fun(x)
- n = n + 1;
- r = fun(x);
- end
-
- 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 count_fun(x_1) < count_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
|