Vous êtes sur la page 1sur 2

Université Ammar Tliji de Laghouat Méthode numérique/Département de ST

2015 – 2016 /2éme année ST

TP N°1
Méthodes numériques (Résolution de l’équation f(x)=0)
La Méthode de bissection (de dichotomie)

I. L’algorithme de la méthode de bissection


Cette méthode est utilisée pour calculer les zéros d'une fonction continue f (⇔) dans un intervalle a,b:
1. Si f (a). f (b) 0, alors la méthode termine (pas de zéros).
2. Sinon si f (a). f (b) 0, on sait alors qu’il existe au moins un zéro x de f dans l’intervalle [a,b].
3. Tant que |b a| tol :

(a+ b)
a) Soit x n= ;
2
b) Si f ( x n) 0, alors x = x n et la méthode termine.

c) Sinon si f(a ) . f( x n) < 0 on pose


b=x n , f (b)= f ( x n);

d) Sinon si f( x n) . f(b ) < 0, on pose


a = x n , f (a)=f ( x ¿¿ n)¿ ;
fin si
affichez : ( x et f( x ) pour chaque itération )
fin tant que
fin si
4. Tracer la fonction et illustrer leur zéro x sur la même figure.

II. Application
1. Implémenter la méthode de la bissection sous forme d’une fonction de Matlab:

function [zero,fzero,err]=bisect(fnc,a,b,tol)
Avec les arguments d’entrée :
a. fnc : la fonction à trouver les zéros (à entrer comme un string - entre guillemet ‘ ’ ).
b. a, b : l’intervalle initial.
c. tol : largeur de l’intervalle a,bà atteindre.
Et les arguments de sortie:
a. zero, fzero : le zéro à trouver et sa valeur dans la fonction.
b. err : valeur absolue de l’erreur finale (abs(a-b) finale).

2. Appliquer la fonction produite pour trouver le zéro de la fonction suivante :

f (x) cos(x) sin(x) dans l’intervalle 1,2à implémenter dans une fonction séparée

3. Produire le tableau des valeurs progressives (x,f(x)) jusqu’au zero.


4. Tracer cette fonction en indiquant dans le graphe le zéro trouvé.

RM
Utiliser la command feval() qui exécute une fonction spécifiée par un string pour une valeur donnée :
Ex
Université Ammar Tliji de Laghouat Méthode numérique/Département de ST
2015 – 2016 /2éme année ST

>>feval(‘sin’,pi/2)
ans= 1
function [zero,fzero,err]=bisect(f,a,b,tol);
%la fonction de dichotomie
%-------------------------

fa=feval(f,a);
fb=feval(f,b);

if fa*fb>0
str=['pas de zero dans cet intervalle'];
disp(str);

elseif fa*fb<0
while abs(b-a)>tol
zero=(a+b)/2;
fzero=feval(f,zero);

if fzero ==0
a=zero;
b=zero;
err=(a+b)/2;
fb=fzero;
break
elseif fa*fzero<0
b=zero;
fb=fzero;

elseif fb*fzero<0
a=zero;
fa=fzero;
end

str=['zero=',num2str(zero),' fzero=',num2str(fzero)];
disp(str)
end
end
%le zero et leur image:
%---------------------
zero=(a+b)/2;
fzero=feval(f,zero);
err=abs(b-a)
%la partie graphique:
%-------------------
fplot(f,[1 2]);
xlabel('x')
ylabel('la fonction f(x)')
text(zero,fzero,'le zero calculé');
hold on
plot(zero,fzero,'o')
grid on

%la fonction f(x):


%-----------------
function y=f(x);
y=cos(x)*sin(x);

%Exécution :
%-----------
>>[zero,fzero,err]=bisect('f',1,2,1e-5);

Vous aimerez peut-être aussi