function [n,X]=iteration_dichotomie(a,b,nmax,epsilon,fcn)


%	iteration_dichotomie : calcul d'une racine d'une fonction par dichotomie
%
% *********************************************************
%
%	[n,X]=iteration_dichotomie(a,b,nmax,epsilon,fcn) renvoie
%  les itérés de la méthode de dichotomie
%
%	variables d'entrées : 
%     * a,b : borne de l'intervalle (avec f(a)f(b)<=0) 
%		* nmax : nombre maximal d'itérations
%     * epsilon : précision souhaitée
%     * fcn est une chaîne de caractère représentant la fonction 
%      (de type inline, builtin ou par fichier M-file);
%
%	variables de sortie :
%     * n est l'indice tel que (1/2^n)(b-a)<epsilon
%     * X est une vecteur qui contient les valeurs de x_0 à x_n
%
% 
% 
% ************ Fonctions auxiliaires utilisées ************
%
%       aucune
%
% *********************************************************
%



% Contrôles d'entrée
if (a>=b)
   error('il faut a<b');
end
qs=exist(fcn);
if (qs~=2) & (qs~=5) & (qs~=1)
   error('fcn doit être le nom d''une fonction (built-in, M-file ou inline)');
end
if (feval(fcn,a)*feval(fcn,b)>0)
   error('il faut f(a)f(b)<=0');
end

% corps d'algorithme
X=(a+b)/2;
n=fix(-log(epsilon/(b-a))/log(2))+1;
if (n>nmax)
   error('il faut n plus petit que nmax');
end
for k=1:n
   x=(a+b)/2;
   X=[X x];
   auxif=feval(fcn,a)*feval(fcn,x);
   if (auxif<=0) 
      b=x;
   else
      a=x;
   end   
end
