|
123456789101112131415161718192021222324252627282930313233343536 |
- function [a, b, k] = min_golden_section(fun_expression, alpha, beta, epsilon, lambda)
- %
-
-
- % Error checking
- if lambda <= 0
- error ('Convergence criteria not met')
- end
-
- % Init variables
- gamma = 0.618;
- a = alpha;
- b = beta;
- fun = matlabFunction(fun_expression);
-
- % calculate x1, x2 of the first iteration, since the following iteration
- % will not require to calculate both
- k=1;
- x_1 = a(k) + (1 - gamma)*(b(k) - a(k));
- x_2 = a(k) + gamma*(b(k) - a(k));
-
- while b(k) - a(k) > lambda
- % set new search interval
- k = k + 1;
- if fun(x_1) < fun(x_2)
- a(k) = a(k-1);
- b(k) = x_2;
- x_2 = x_1;
- x_1 = a(k) + (1 - gamma)*(b(k) - a(k));
- else
- a(k) = x_1;
- b(k) = b(k-1);
- x_1 = x_2;
- x_2 = a(k) + gamma*(b(k) - a(k));
- end
- end
|