next up previous contents
suivant: Interpolation de Lagrange monter: Résolution numérique d'équation précédent: Méthode de la Dichotomie   Table des matières

Méthode de la Section Dorée

C'est une variante de la méthode de Dichotomie, elle permet entre autre de n'avoir à évaluer qu'une seule fois la fonction à minimiser à chaque itération.
function [intervalle,iter]=section_doree(fonction,intervalle,epsilon,iter)
//
init=iter;
binf=min(intervalle);
bsup=max(intervalle);
tau=(1+sqrt(5))/2;
tau=1/tau;
if norm(binf-bsup)==%inf then error('une des bornes de l''intervalle est infinie'), end;
  b1   = bsup-tau*(bsup-binf);
  b2   = binf+tau*(bsup-binf); 
  f_binf  = fonction(binf);
  f_bsup  = fonction(bsup);
  f_b1    = fonction(b1);
  f_b2    = fonction(b2);
  u=file('open','results_doree','unknown');
  // Methode de la section doree
  while ((abs(binf-bsup)>= epsilon) & (iter >= 1))
    tab=[f_b1,f_b2];
    [a,b]=gsort(tab,'c','i');
    if b(1)==1 then
      bsup=b2;
      b2=b1;
      f_b2=f_b1;
      b1=binf+bsup-b2;
      f_b1=fonction(b1);
    else
      binf=b1;
      b1=b2;
      f_b1=f_b2;
      b2=binf+bsup-b1;
      f_b2=fonction(b2);
    end
    fprintf(u,'iter = %2.0f binf = %10.8f bsup = %10.8f precision %10.8f',...
	init-iter+1,binf,bsup,abs(bsup-binf));
    iter=iter-1;
  end
  file('close',u)
  intervalle=[binf,bsup];
endfunction


\begin{sessioncmd}
\par deff(''[y]=func(x)'',''y=x^2-4*x+6'') \sleftarrow{\norma...
...
iter =
\par0.
intervalle =
\par ! 1.8847051 2.1286236 !
\par\end{sessioncmd}



barty 2004-04-29