function [xv, fxv, n] = bisezione (f, a, b, toll, nmax) % BISEZFUN Metodo di Bisezione % % Uso: % [xv, fxv, n] = bisezfun(f, a, b, toll, nmax) % % Dati di ingresso: % f: funzione (handle function) % a: estremo sinistro % b: estremo destro % toll: tolleranza richiesta per l'ampiezza dell'intervallo % nmax: massimo indice dell'iterata permesso % % Dati di uscita: % xv: vettore contenente le ascisse delle iterazioni % fxv: vettore contenente i corrispondenti residui (f(xv)) % n: indice dell'iterazione finale calcolata %inizializzo i vettori xv=[]; fxv=[]; n=[]; % poni "a < b" anche in caso di errore dell'utente. if b < a s=b; b=a; a=s; end fa=f(a); fb=f(b); % se a o b sono zeri della funzione, esci dopo aver % assegnato i valori alle variabili di output if fa == 0 xv=a; n=0; fxv=0; return; elseif fb == 0 xv=b; n=0; fxv=0; return; end % se il numero delle iterazioni non supera nmax esegui for index=1:nmax xv(index)=(a+b)/2; fc=f(xv(index)); % calcola il nuovo intervallo [a,b]. if sign(fc) == sign(fa) a=xv(index); fa=fc; %SUB INTV. DX. else b=xv(index); fb=fc; %SUB INTV. SX. end fxv(index)=fc; % controlla test di arresto. Se uno dei due รจ verificato, esci. if (abs(fxv(index)) < toll) | (fc == 0) n=index; fprintf('\n'); return; end end n=nmax; fprintf('\n')