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

%> Dominio da solucao

t_inicial = 1;
t_final = 6;

%> Condicoes iniciais

x_inicial = 1;

% Dominio de resolucao

delta = 15;
M = delta^2;
epsilon = min(delta,delta/M);

t_segmentos = (t_inicial : epsilon : t_final)'; 

%> Parametros de resolucao

Tol = 1e-6;             % Tolerancio do metodo
ContadorMax = 500;      % Numero maximo de iteracoes permitidas em cada passo da extensao
L = 10;                 % Quantidade de pontos em cada seguimento

%>> Resolvendo Picard e estendendo Dominio

% Resolvendo primeiro segmento da solucao

t = linspace(t_segmentos(1),t_segmentos(2),L)';
xi = ones(size(t))*x_inicial;

xold = xi;
Erro = 1;
contador = 0;

while Erro > Tol

    x = Picard(t,xi,xold,F);

    dif = x - xold;
    Erro = max(dif);

    xold = x;

    contador = contador + 1;
    if contador > ContadorMax
        break
    end
    Ct = contador;
end

% Estendendo dominio e resolvendo
for i = 3:length(t_segmentos)
    
    t_novo = linspace(t_segmentos(i-1),t_segmentos(i),L)';
    t = [t(1:end-1);t_novo];
    xi = [ones(size(t))*x_inicial];
    
    xold = [xold(1:end-1);ones(size(t_novo))*xold(end)];
    
    Erro = 1;
    contador = 0;
    while Erro > Tol

        x = Picard(t,xi,xold,F);

        dif = x - xold;
        Erro = max(dif);

        xold = x;

        contador = contador + 1;
        if contador > ContadorMax
            break
        end
    
    end
    Ct = [Ct,contador];

end

figure;

plot(t,x)
hold on

xlabel('t');
ylabel('x')

