% 
%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
%<><> 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 - 21/09/2016                                               <><>
%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
%<><> Capitulo 1                                                       <><>
%<><> Experimento: Dinamica de Populacoes                              <><>
%<><> Objetivo 1                                                       <><>
%<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

% Definicao dos paramentros de Lotka-Volterra
C = [1; -1];            % Definindo Matriz de fatores 
A = [0 , 1; 1, 0];      % Definindo Matriz de iteracoes

% Parametrizando sistema de Lotka-Volterra
F = @(t,x) LotkaVolterra(t,x,C,A);  

% Definindo parametros da simulacao
dt = 0.1;               % Passo de tempo
T = 7;                  % Tempo maximo simulado

t0 = 0;                 % Tempo Inicial
x0 = [1; 0.1];          % Polulacoes iniciais

N = (T - t0)/dt + 2;    % Numero de passos previsto para simulacao
t = zeros(N,1);         % Prealocando arrays para os valores de tempo simulados
t(1) = t0;
x = zeros(N,2);         % Prealocando arrays para os valores de Populacao simulados
x(1,:) = x0;

% Iterando Metodo de Euler
tn = t0;
contador = 1;

while tn <= T
    
    contador = contador + 1;
    
    [tn, xn] = NewtonStep(t(contador - 1), x(contador-1,:)',dt,F);
    
    t(contador) = tn;
    x(contador,:) = xn';
    
end


plot(x(:,1),x(:,2),'-*')
hold on