function [y, n] = bisect(f, a, b)
% bisect(f, a, b)
%   Nullstellenbestimmung durch Bisektion
%
% Input
%   f    Funktion ("function handle")
%   a, b Intervallgrenzen, a < b, f(a) * f(b) < 0
%
% Output
%   y    Nullstelle
%   n Anzahl der Iterationen

% Copyright (c) 2015 Hans W. Borchers

if f(a)*f(b) >= 0
    error('Vorzeichen nicht unterschiedlich.')
end

x1 = a; x2 = b;
tol = 5e-16;

n = 0;
while abs(x2-x1) > tol
    n = n+1;
    xm = (x1+x2)/2;
    if f(x1)*f(xm) > 0
        x1 = xm;
    else
        x2 = xm;
    end
end
y = (x1+x2)/2;

end