%
% Resolution de l'equation de la chaleur
% avec un schema explicite
% avec conditions de Dirichlet aux bords
% Comparaison avec la solution exacte
%

clear

fprintf('\n')
disp('Résolution de l''équation de la chaleur')
disp('avec conditions aux limites de Dirichlet ')
disp('par un schéma d''Euler explicite en temps.')
disp('Comparaison avec la solution exacte')

D = 1/(pi^2);

Nm = input('Entrez le nombre de points : ');

dt = input('Entrez le pas de temps : ');


h=1/(Nm+1);
z=h:h:Nm*h;

% Donnee initiale

for i=1:Nm
v(i)=sin(pi*i*h);
u(i)=v(i);
end

u=u';

plot(u);
axis([0 Nm 0 1]);
title('Donnée initiale')
disp('Pressez une touche pour continuer')
pause

%
% Matrice du laplacien
% (diffusion traitee de facon explicite)
%

A=2*eye(Nm);

for i=2:Nm-1,
        A(i-1,i)=-1;
        A(i+1,i)=-1;
end

A(2,1)=-1;
A(Nm-1,Nm)=-1;

AA = eye(Nm) - D*A*(dt/(h^2));


%
% Boucle de calcul - Evaluation de l'erreur
% avec la solution exacte.
%

for k=1:1000


u= AA*u;

y=exp(-k*dt)*v;
y=y';

e=norm(u-y,inf);
fprintf('Erreur à l''instant %f : %e \n',k*dt,e)


%
% Affichage de u
%

plot(u);
axis([0 Nm 0 1]);
drawnow

pause

end
