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 |
bonsoire s'il vous plait j'ai bessoin d'appliquer cette fonction en méthode de dicothomie sur matlab
RépondreSupprimerF(x)=(x^2)-2 intervalle (0,3) eps=0.01