function [] = interval_over_iterations(method) % Calculate and plot the [a,b] interval over the iterations for different % lambda values (min, mid, max) % % method: the minimum calculation method, one of: % * bisections % * golden_section % * fibonacci % * bisection_der % return: % none % % Load the functions and interval GivenEnv; fig_dir = 'figures'; if ~exist(fig_dir, 'dir') mkdir(fig_dir); end % Setup % ======================== % % We need to test against the same lambda values for all the methods in % order to compare them. And since epsilon (which is related to lambda) % was given for the bisection method, we base our calculations to that. % % % epsilon: e = 0.001 % lambda: l > 2e => % lambda_min: 0.0021 % lambda_max: 0.1 % N: 3 points (3 lambda values min-mid-max) N = 3; epsilon = 0.001; lambda_min = 0.0021; lambda_max = 0.1; lambda = linspace(lambda_min, lambda_max, N); k = zeros(1, N); % preallocate k n = zeros(1, N); % preallocate n % % Call the minimum calculation method for each lambda value for each % function and keep the number of iterations needed. % Then Plot the [a,b] interval over iterations for each lambda for each % function. % % note: In order to use the same method call for all methods, we force a % common interface for minimum method functions. Thus some arguments % will not be needed for some methods (epsilon is not needed for % bisection _der for example). % disp(" "); for i = 1:length(funs) figure('Name', "interval_over_iterations_" + char(method) + "_fun" + i, 'NumberTitle', 'off'); set(gcf, 'Position', [100, 100, 1280, 720]); % Set the figure size to HD for j = 1:N [a, b, k(j), n(j)] = method(funs(i), a_0, b_0, epsilon, lambda(j)); fprintf('%20s(%34s ): [a, b]= [%f, %f], @lambda=%f, iterations= %d\n', ... char(method), char(funs(i)), a(end), b(end), lambda(j), k(j) ); subplot(length(funs), 1, j); plot(1:length(a), a, 'ob'); hold on plot(1:length(b), b, '*r'); if j == 1 title(titles(i), 'Interpreter', 'latex', 'FontSize', 16); end xlabel("Iterations @lambda=" + lambda(j)); ylabel('[a_k, b_k]'); end % Print and save the figure %fig_epsc = fullfile(fig_dir, "interval_over_iterations_" + char(method) + "_fun" + i + ".epsc"); fig_png = fullfile(fig_dir, "interval_over_iterations_" + char(method) + "_fun" + i + ".png"); %print(gcf, fig_epsc, '-depsc', '-r300'); print(gcf, fig_png, '-dpng', '-r300'); close(gcf); end