%% Universidad Nacional de Chimborazo
% Asignatura: Métodos Numéricos
% Tema: Determinación de varias raíces de una ecuación no lineal.
% Estudiante:
% Fecha:

% Definición de la función no lineal
f = @(x) cos(x);  % Aquí puede cambiar la función según sea necesario

% Definir el intervalo de búsqueda
a = -10;  % Límite inferior del intervalo
b = 10; % Límite superior del intervalo

% Definir el número de subdivisiones para buscar cambios de signo
n_subdiv = 1000;
x_values = linspace(a, b, n_subdiv);  % Crear puntos en el intervalo

% Buscar los cambios de signo para identificar posibles raíces
roots_found = [];  % Array para almacenar las raíces encontradas
for i = 1:(n_subdiv-1)
    % Evaluar la función en dos puntos consecutivos
    if f(x_values(i)) * f(x_values(i+1)) < 0
        % Si hay un cambio de signo, usar fzero para refinar la raíz
        root = fzero(f, [x_values(i), x_values(i+1)]);
        roots_found = [roots_found, root];  % Guardar la raíz
    end
end

% Eliminar raíces duplicadas debido a la resolución numérica
roots_found = unique(round(roots_found, 6));  % Redondear para evitar duplicados cercanos

% Mostrar las raíces encontradas
disp('Raíces encontradas en el intervalo:');
disp(roots_found);

% Graficar la función y las raíces encontradas
fplot(f, [a b]);
hold on;
plot(roots_found, f(roots_found), 'ro', 'MarkerSize', 8, 'DisplayName', 'Raíces');
xlabel('x');
ylabel('f(x)');
title('Raíces de la función no lineal en el intervalo');
grid on;
legend;
hold off;