////////////////////////////////////
// Résolution de l'équation de la //
// chaleur par méthode spectrale  //
////////////////////////////////////


//Choix des paramètres

N=100;//Nombre de modes considérés
n=[1:N]';
dt=0.002;//Pas de temps


x=linspace(-%pi,%pi,100);//Grille en espace (uniquement pour l'affichage)


///////Coefficients de Fourier de la condition initiale//////////////
coef_0=sin(n*%pi/2)/%pi-(1-(-1)^n)./(%pi*n);

//////Configuration des fenêtres graphiques///////////////////////

f=scf(0);//On ouvre une fenêtre
f.pixmap="on";//Pour faire une animation

//////////Évolution en temps//////////////////////////////:

t=[];
norme_y=[];
while 1==1
  t=[t t($)+dt];
  clf();
  y=sum((coef_0.*exp(-n*t($)))'*sin(n*x),'r');
  norme_y=[norme_y sqrt(sum((x(2)-x(1))*y.^2))];
  subplot(2,2,1);
  title("Tracé de la solution");
  plot2d(x,y,5,rect=[-%pi,-2,%pi,2]);//Tracé de la fonction
  subplot(2,2,2);
  title("Tracé de la solution (renormalisé)");
  plot2d(x,y/norme_y($),5);//Tracé renormalisé
  if (size(t,'c')>2)
	subplot(2,2,3);
	//On trace la norme de la solution (en échelle logarithmique)
	title("Norme de la solution (échelle logarithmique)");
	plot2d(t,log(norme_y),13);
	//Comparaison avec la norme du premier terme de la série
	plot2d([0,t($)],-log(sqrt(%pi))-[0,t($)],5);
  end;
  show_pixmap();
end;
