%
%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
%<><> Codigo complementar do livro "Equacoes Diferenciais Ordinarias"  <><>
%<><> dos professores Marcelo Viana e Jose Espinar                     <><>
%<><>                                                                  <><>
%<><> Codigo escrito por Guilherme Tegoni Goedert                      <><>
%<><> https://git.impa.br/ggoedert/EDO/tree/master                     <><>
%<><> v 1.0 - 25/09/2016                                               <><>
%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
%<><> Capitulo 8                                                       <><>
%<><> Experimento: Maior Expente de Lyapunov                           <><>
%<><> Objetivo 3                                                       <><>
%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

% Definicao do sistema e dominio

delta= 0.25;
alpha = 1;
beta = -1;

d_gamma = 0.05;
d_omega = 0.05;
gamma = -5:d_gamma:5;
omega = -5:d_omega:5;

ti = 0;
h = 0.01;

% Condicao inicial e perturbacao
W0 = [0.2; 0 ; 0];
d0 = 1e-10;

[Gamma,Omega] = meshgrid(gamma,omega);
MaiorExpoente = zeros(size(Omega));

parpool(4)

tic
parfor i = 1 : length(omega)
    tempExpoente = MaiorExpoente(i,:);
    for j = 1 : length(gamma)
        
        System = @(t,z) Duffing(t,z,delta, alpha, beta, Gamma(i,j), Omega(i,j));

        [tempExpoente(j),contador] = Objetivo3(W0,d0,System,h);
        
    end
    MaiorExpoente(i,:) = tempExpoente;
end
tempoExecucao = toc

delete(gcp)

Estavel = MaiorExpoente > 0;
Instavel = MaiorExpoente < 0;

Cores = zeros(length(omega),length(gamma),3);
Cores(:,:,1) = Instavel;    % Vizinhancas instaveis pintadas de vermelho;
Cores(:,:,2) = Estavel;     % Vizinhacas estaveis pintadas de verde;
image(gamma,omega,Cores)
xlabel('Gamma')
ylabel('Omega')
