function [nst,val,xarray,yarray] = aufg01f02(xl0,xr0,tol);

%AUFG01F02 implementiert Nullstellensuche durch Intervallhalbierung.
%
%   [NST,VAL] = AUFG01F02(XL0,XR0,TOL) berechnet bei vorgegebenem
%   linken und rechten Startwert XL0 und XR0 und einer Toleranz TOL
%   eine approximative Nullstelle NST des Polynoms und den zugehoerigen
%   Funktionswert VAL.
%
%   [NST,VAL,XARRAY,YARRAY] = AUFG01F02(XL0,XR0,TOL) gibt zusaetzlich
%   im Array XARRAY die Historie der x-Werte und im Array YARRAY die
%   Historie der y-Werte zurueck.
%
%   AUFG01F02 ist die Loesung der Aufgabe 2 von Uebungsblatt 1
%   der Vorlesung 'Numerische Verfahren' von Jens Zemke.
%
%   SEE ALSO: aufg01f01

%   $Author: zemke $
%   $Revision: 1.8 $
%   $Date: 2004/04/15 10:45:50 $

if nargin == 0
   xl0 = pi/2;
   xr0 = pi;
   tol = 1e-5;
end

if (nargin ~= 3 & nargin ~= 0)
   error('Falsche Menge an Eingabeparametern eingegeben');
end

maxsteps = 1000;

xl = xl0; yl = aufg01f01(xl);
xr = xr0; yr = aufg01f01(xr);
if yl >= 0 | yr <= 0
   error('Es wurden unzulaessige Startwerte eingegeben');
end

xarray = [xl xr];
yarray = [yl yr];

steps = 0;
while ( xr-xl > tol & steps <= maxsteps )
   steps = steps + 1;
   xm = (xl+xr)/2; ym = aufg01f01(xm);
   if ym < 0
      xl = xm; yl = ym;
   else
      xr = xm; yr = ym;   
   end
   xarray = [xarray; xl xr]; yarray = [yarray; yl yr];
end
nst = xl; val = yl;
if abs(yr) < abs(yl)
   nst = xr; val = yr;
end

n = steps+1; index = 1:n;

plot(index,xarray(:,1),'g-',...
     index,xarray(:,2),'b-',n, nst,'r*');
title('x-Verlauf der Iteration'); grid('on');

%
% title('y-Verlauf der Iteration'); grid('on');
% plot(index,yarray(:,1),'g-',...
%      index,yarray(:,2),'b-',n, val,'r*');
%
%
