function fftpur1D(N,M,T,f,h,m)
% N est le nombre de subdivisions en espace. 
% La largeur des subdivisions est dx
% M est un entier determinant le pas de temps dt = M*dx
% T est le temps final
% f le type de fonction pour u0
% h parametre (demi-largeur du support)
% m milieu du support
% Ce programme est autonome et calcule la solution des ondes 
% avec conditions aux limites periodiques, a l'aide des
% transformations de fft et fft inverse (fft.m et ifft.m, voir les help
% de Matlab pour leurs definitions mathematiques)

% Preparation des proprietes de la figure 1
figure(1)
WHITEBG(1,'k')
set(1,'Renderer','zbuffer')

% La partition en espace
dx = 1/N ;
x = [0:dx:1-dx] ;

% Les donnees initiales possibles
xmi = max(0,m-h) ;
xma = min(1,m+h) ;
if f == 'a'
	y = (xmi<x & x<xma) ;
elseif f == 'b'
    y = (xmi<x & x<xma) .* ( 1 - abs( (x-m)/h ) )  ;
elseif f == 'c'
    y =  (xmi<x & x<xma) .* sin( pi*(x-m)/h + pi )  ;
elseif f == 'd'
    y =  (xmi<x & x<xma) .* sin( pi*(x-m)/h + pi ).^2  ;
elseif f == 'e'
    y =  (xmi<x & x<xma) .* cos( pi*(x-m)/(2*h) )  ;
elseif f == 'f'
    y =  (xmi<x & x<xma) .* cos( pi*(x-m)/(2*h) ).^2  ;
end

% Calcul de la fft (remplace, sans que ce soit la meme chose, 
% le calul des coefficients de Fourier
z = fft(y) ;

% Formule de representation en temps, a l'aide de ifft
dt = M*dx ;
k = [0:N-1] ;
pause(1)
for t = 0:dt:T 
	zt = z .* cos(2*pi*k*t) ;
	pause(0.1)
	zzt = real(ifft(zt)) ;
	plot(x,zzt,'c') ;
	axis([0 1 -1 1])
	title(['t  =  ',num2str(t)])
end

% Le resultat est meilleur qu'avec la methode generale, mais n'est valable
% qu'avec les conditions aux limites periodiques et seulement en des temps
% bien choisis. Pour s'en convaincre essayer d'utiliser un M non entier !
