% Resolvendo Eq Onda 1D (Solucao de d'Alambert)

% Utt = c Uxx
c = -1;
u0 = @(x) sin(x);
ut0 = @(x) (x);
PrimitivaUt0 = @(x) -cos(x);

% Definicao de grade
dt = 0.01;
dx = 0.01;

x = 0:dx:5;
t = 0:dt:2;
menor = min(u0(x));
maior = max(u0(x));

%%%% Evoluindo caracteristicas e deslocando onda

for i = 1:max(size(t))
    
    Ksi = x - c.*t(i);
    Eta = x + c.*t(i);
   
    u = (u0(Ksi) + u0(Eta))./2 + (PrimitivaUt0(Ksi) - PrimitivaUt0(Eta))./(2*c);
    
    plot(x,u)
    title(sprintf('t = %f',t(i)))
    axis([x(1) x(end) menor maior])
    pause(0.2)
    
end