function fft1D(N,M,T,f,h,m,c)
% 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 de la
% transformation de fft.m, voir le help de Matlab

% 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) ;
FC = z/N ;

% Formule classique de representation en temps, en utilisant 
% les FC qui sont des approximations des coefficients de Fourier
% C'est plus lent mais plus souple et permet de traiter l'operateur
% Au = - u" + 4*c*pi^2 .
dt = M*dx ;
k = [0:N-1] ;
pause(1)
for t = 0:dt:T
	zzt = 0*x ;
	for j = 1:N ;
		jm1 = mod(j-1+N/2,N) - N/2 ;
		zzt = zzt +...
		FC(j) * exp(2*i*pi*jm1*x) * cos(2*pi*sqrt(jm1^2+c)*t) ;
	end
	zzt = real(zzt) ;
	pause(0.1)
	plot(x,zzt*0,'w',x,zzt,'r') ;
	zmaxx = max(abs(zzt)) ;
	axis([0 1 -max(zmaxx,1) max(zmaxx,1)])
	title(['t  =  ',num2str(t,'%1.2f'),...
		'        &        zmax  =  ',num2str(zmaxx,'%1.3f')])
end
