%
% file bisect.m
%
% Programm zur Nullstellensuche durch Bisektion
%
% Aufruf: x0 = bisect(func,x1,x2,tol)
%
% INPUT x1,x2: Anfangsintervall; 
% OUTPUT x0: gesuchte Nullstelle
%
% ES MUSS SEIN: x1 < x2, func(x1)*func(x2) <= 0
% func: function handle auf Funktion func(x)
% tol: Gewuenschte absolute Genauigkeit
% 
  function [x0] = bisect(func,x1,x2,tol)
  f1=func(x1); if f1 == 0, x0=x1; return; end
  f2=func(x2); if f2 == 0, x0=x2; return; end
  if x1 >= x2
    error(' keine Nullstelle wg. x1 >= x2');
  end
  if f1*f2 > 0 
    error(' keine Nullstelle wg. f(x1)*f(x2)>0 ');
  end
% Bisektionsloop:
  for i=1:100
    x0 = 0.5*(x2+x1);
    fprintf('%d %20.15f \n', i,x0)
    if x2 - x1 < tol, return; end
    f0=func(x0);
    if f0*f1 <= 0
      x2=x0; f2=f0;
    else
      x1=x0; f1=f0;
    end
  end
  error(' keine Nullstelle gefunden')
