Fonction dichotomie calcul numérique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 577 fois - Téléchargée 24 fois

Contenu du snippet

un simple programme ecrit en pascal définit la méthode dichotomie

Source / Exemple :


program dicotomie;
var y:integer;
function f(var x:real):real;

begin
if y=1 then f:=sin(x)-1/2
       else begin if y=2 then f:=exp(x)-2
                         else begin if y=3 then f:=sqr(x)-2 end; end;
end;
procedure verif;
var a,b,m,ep,va:real;
    i,n:integer;
    r,c:char;
begin  repeat
   writeln('choisir une fonction parmis les trois');
   writeln('f[x]=sin(x)-1/2.....[1]');
   writeln('f[x]=exp(x)-2.......[2] ');
   writeln('f[x]=x(puiss)2-2....[3] ');
   write('entrer le nombre [i] de 1..3 i=');
   readln(y);
   writeln('pour calculer la racine de la fonction f[x] donne  l?intervalle [a,b]?) ; 
   write('                      donner a=');
   readln(a);
   write('                      donner b=');
   readln(b);begin
             if a>b then
               repeat writeln('*****************REMARQUE**************');
 writeln('                       *** il faut que a<b ***     ');
 write('S.V.P entrer un autre intervalle ou invercer les valeurs a=');
                      readln(a);
                      write('                                                         b=');
                      readln(b);
               until a<b;
   begin
     if f(a)*f(b)>0  then
       repeat
         writeln('*******************REMARQUE************************');
writeln('  *** la fonction ne admet aucun zero dans se intervalle *** ');
writeln('     ');
         write('S.V.P entrer un autre intervalle a=');
         readln(a);
         write('                                 b=');
         readln(b);
       until f(a)*f(b)<=0;
         writeln('la fonctin f admet au moins un zero dans [',a,';',b,']');
         write('                ');
         write('entrer le nombre d"iteration n=');
         readln(n);
           m:=(a+b)/2; if f(m)=0  then  ep:=m
                             else
                              begin  for i:=1 to n-1 do
                               begin   if f(m)*f(a)>0 then begin a:=m; m:=(b+m)/2;   end
                                                            else  m:=(a+m)/2; b:=2*m-a;
                                                                 end;
                                     end; i:=i+1;
                                          ep:=m;
                    writeln('   la RACINE pour l"iteration ',n,' est epsilon=',ep);
                    write('voulez vous calculerf[',ep,'] O/N?');
                    readln(c); if c='O' then writeln('f[',ep,']=',f(ep));
       write('voulez vous continuer O/N? ');
       readln(r);    end;      end;
  until r='N';

end;

begin
   writeln('                           DICOTOMIE                                ');
   writeln('       ');

   writeln('              ');
     verif;

end.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (billegate2006)