% Input: f, function handle della funzione f % x = [ x1 x2 ], vettore delle due ascisse iniziali % tol, tolleranza assoluta sulla distanza tra le due ascisse finali % Output: z, zero di f, f(z)=0 function z = metodo_bisezione(f, ab, tol) % Valori della funzione agli estremi dell'intervallo f_ab = f( ab ) ; Delta = ab(2) - ab(1) ; while abs( Delta ) > tol xm = ( ab(1) + ab(2) ) / 2 ; % punto medio dell'intervallo f_xm = f( xm ) ; % f( punto medio ) % Caso di funzione nulla nel punto medio: uscita if f_xm == 0 ab = [ xm xm ] ; % assegnazione intervallo puntiforme f_ab = [ 0 0 ] ; % assegnazione valori nulli agli estremi break ; % uscita dal ciclo for else % Nel caso di funzione non nulla nel punto medio, bisogna decidere quale % semi-intervallo scegliere if sign( f_ab(1) ) ~= sign( f_xm ) % f cambia segno nell'intervallo sx % Teniamo il semi-intervallo sinistro ab(2) = xm ; f_ab(2) = f_xm ; else % Teniamo il semi-intervallo destro ab(1) = xm ; f_ab(1) = f_xm ; end end Delta = ab(2) - ab(1) ; end z = ( ab(1) + ab(2) ) / 2 ; % punto medio end