
%>>> Parametros de resolucao
ContadorMax = 10;

%>>> Definicao do sistema
F = @(t,x) Funcao(t,x); 

erro = zeros(ContadorMax,1);

%>>> Condicoes iniciais
t0 = 0;                     
x0 = [1;0];                     

%>>> Intervalo de definicao
% Raio da "caixa inicial" para definicao do intervalo de definicao
delta = 0.5;
% Largura da malha 
largura_malha = 0.01;

% Norma maxida da velocidade na caixa inicial
y = F(t0-delta:largura_malha:t0+delta,x0-delta:largura_malha:x0+delta);
M = max(sqrt(y(:,1).^2 + y(:,2).^2));


% Raio do intervalo de definicao
epsilon = min(delta, delta/M);

% Intervalo de definicao da solucao
N = 25;
t = linspace(t0, t0 + epsilon, N)';

exata = Solucao(t);

%>>> Iteracao de Picard
% Curva inicial para iteracao
xi = ones(size(t))*x0';          

x = zeros([size(xi),ContadorMax]);
x(:,:,1) = xi;

erro(1) = max(abs(x(:,1,1) - exata));

% Definicao do metodo de integracao
%integrador = @(y) Retangulo(t,y,F);
integrador = @(y) Trapezio(t,y,F);


% Iterando Metodo de Picard
figure;
for i = 2:ContadorMax
    
    x(:,:,i) = xi + integrador(x(:,:,i-1));
    erro(i) = max(abs(x(:,1,i) - exata));
    
    plot(t,x(:,1,i),'.-r',t,exata)
    title(sprintf('n = %f',i))
    pause(0.5)
end

% Plotando erro
figure; plot(erro)
title('Erro')