dimanche 26 mai 2013

Algorithme de la méthode de bissection en Matlab

Algorithme de la méthode de bissection en Matlab :

function [zero,res ,niter]=bisection(fun ,a,b,tol ,...
nmax,varargin )
%BISECTION Cherche les zéros d’une fonction .
% ZERO=BISECTION(FUN ,A,B,TOL ,NMAX) tente de trouver
% un zéro ZERO d’une fonction continue FUN sur
% l’intervalle [A,B] utilisant la méthode de
% dichotomie (ou bisection).
% FUN prend des réels en entrée et retourne un
% scalaire réel. Si la recherche échoue, un message
% d’erreur est affiché. FUN peut aussi être
% un objet inline, une fonction anonyme ou
% bien être définie par un M-files.
% ZERO=BISECTION(FUN ,A,B,TOL ,NMAX,P1,P2 ,...) passe
% les paramètres P1, P2 ,... à la fonction
% FUN(X,P1,P2 ,...).
% [ZERO,RES ,NITER]= BISECTION(FUN ,...) retourne la
% valeur approchée du zéro, la valeur du résidu en
% ZERO et le numéro de l’itération à laquelle ZERO a
% été calculé.
x = [a, (a+b)*0.5 , b]; fx = feval(fun ,x,varargin {:});
if fx(1)*fx(3) >0
error([’Les signes de la fonction aux extrémités’ ,...
’ de l’’intervalle doivent être différents\n’]);
elseif fx(1) == 0
zero = a; res = 0; niter = 0; return
elseif fx(3) == 0
zero = b; res = 0; niter = 0; return
end
niter = 0;
I = (b - a)*0.5;
while I >= tol & niter < nmax
niter = niter + 1;
if fx(1)*fx(2) < 0
x(3) = x(2);
x(2) = x(1)+(x(3)-x(1))*0.5;
fx = feval(fun ,x,varargin {:});
I = (x(3)-x(1))*0.5;
elseif fx(2)*fx(3) < 0
x(1) = x(2);
x(2) = x(1)+(x(3)-x(1))*0.5;
fx = feval(fun ,x,varargin {:});
I = (x(3)-x(1))*0.5;
else
x(2) = x(find(fx==0)); I = 0;
end
end
if (niter==nmax & I > tol)
fprintf ([’La dichotomie s’’est arrêtée sans \n’ ,...
’converger avec la tolérance souhaitée car \n’ ,...
’le nombre maximal d’’itérations a été atteint\n’]);
end
zero = x(2); x = x(2); res = feval(fun ,x,varargin {:});
return

1 commentaire:

  1. bonsoire s'il vous plait j'ai bessoin d'appliquer cette fonction en méthode de dicothomie sur matlab
    F(x)=(x^2)-2 intervalle (0,3) eps=0.01

    RépondreSupprimer