|
|
@@ -0,0 +1,82 @@ |
|
|
|
function [] = interval_over_iterations(method) |
|
|
|
% Plot the [a,b] interval over the iterations for different lambda |
|
|
|
% values (min, mid, max)) |
|
|
|
% |
|
|
|
% method: the minimum calculation method |
|
|
|
% * bisections |
|
|
|
% * golden_section |
|
|
|
% * fibonacci |
|
|
|
% * bisection_der |
|
|
|
|
|
|
|
|
|
|
|
% 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 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 |
|
|
|
|
|
|
|
|
|
|
|
% |
|
|
|
% 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)] = 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') |
|
|
|
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'); |
|
|
|
end |
|
|
|
|