function [alphan,ok]=Wolfe(alpha,x,D,Oracle)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                          %
%   RECHERCHE LINEAIRE SUIVANT LES CONDITIONS DE WOLFE     %
%                                                          %
%                                                          %
%  Arguments en entree                                     %
%  -------------------                                     %
%    alpha  : valeur initiale du pas                       %
%    x      : valeur initiale des variables                %
%    D      : direction de descente                        %
%    Oracle : nom de la fonction Oracle                    %
%                                                          %
%  Arguments en sortie                                     %
%  -------------------                                     %
%    alphan : valeur du pas apres recherche lineaire       %
%    ok     : indicateur de reussite de la recherche       %
%             = 1 : conditions de Wolfe verifiees          %
%             = 2 : indistinguabilite des iteres           %
%                                                          %
%                                                          %
%    omega1 : coefficient pour la 1-ere condition de Wolfe %
%    omega2 : coefficient pour la 2-eme condition de Wolfe %
%                                                          %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% -------------------------------------
% Coefficients de la recherche lineaire
% -------------------------------------

   omega1 = 0.1;
   omega2 = 0.9;

   alphamin = 0.0;
   alphamax = Inf;

   ok = 0;
   dltx = 0.000000001;

% ---------------------------------
% Algorithme de Fletcher-Lemarechal
% ---------------------------------

   % Appel de l'oracle au point initial
   
   ind = 4;
   [F,G] = Oracle(x,ind);

   % Initialisation de l'algorithme

   alphan = alpha;
   xn     = x;

   % Boucle de calcul du pas
   %
   % xn represente le point pour la valeur courante du pas,
   % xp represente le point pour la valeur precedente du pas.

   while ok == 0
      
      xp = xn;
      xn = x + (alphan*D);

      % Calcul des conditions de Wolfe

      % -----> A completer...
      % -----> A completer...

      % Test de la valeur de alphan :
      % - si les deux conditions de Wolfe sont verifiees,
      %   faire ok = 1 : on sort alors de la boucle while
      % - sinon, modifier la valeur de alphan : on reboucle.

      % -----> A completer...
      % -----> A completer...

      % Test d'indistinguabilite

      if norm(xn-xp) < dltx 
        ok = 2;
      end

   end

end
