%
%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
%<><> 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 4                                                       <><>
%<><> Experimento: Curvas de Nivel                                     <><>
%<><> Objetivos 1 e 2                                                  <><>
%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

% Escolha um metodo: 1 (Euler), 2 (Taylor de ordem 2), 3 (Taylor de ordem 3)
%                    4 (Heun), 5 (RK3), 6 (RK4)
Metodo = 2;

% Evoluindo curvas de nivel das solucoes de Lotka-Volterra usando diferentes metodos de Dif. Finita

t0 = 0;             % Tempo inicial
tf = 10;            % Tempo final
h = 0.01;           % Passo de tempo;

% Condicoes iniciais
x0 = 1;             % Populacao inicial da presa
y0 = 0.5;           % Populacao inicial do predador
z0 = [x0,y0];

% Parametros do modelo
A = -1;
B = -1;
C = 1;
D = 1;

% Definindo eq. diferencial
F = @(t,z) GradPerp_LotkaVolterra(t,z,A,B,C,D);


% Resolvendo usando Metodo Escolhido
if Metodo == 1 % Metodo de Euler
    z = Euler(t0,tf,h,z0,F);
    
elseif Metodo == 2 % Metodo de Taylor ordem 2
    F1 = @(t,z) LotkaVolterra_F1(t,z,A,B,C,D);
    z = Taylor2(t0,tf,h,z0,F,F1);
    
elseif Metodo == 3 % Metodo de Taylor ordem 3
    F2 = @(t,z) LotkaVolterra_F2(t,z,A,B,C,D);
    z = Taylor3(t0,tf,h,z0,F,F1,F2);
    
elseif Metodo == 4 % Metodo de Heun 
    z = Heun(t0,tf,h,z0,F);

elseif Metodo == 5 % Metodo RK3 
    z = RK3(t0,tf,h,z0,F);
    
elseif Metodo == 6 % Metodo RK4
    z = RK4(t0,tf,h,z0,F);
end

% Representacao Grafica dos Resultados
figure; plot(z(:,1),z(:,2))



