function valit=bisekt(fun,vali,tol,nmax)
% Funktio paluttaa 2-sarakkeisen matriisin, josta näkyy epävarmuusvälin kehitys.
% Tarkoitus: Opetus ja havainnollistus.
% Kutsuesim:
%  1. % ab=bisekt('sin',[-1,1])   % oletustoleranssi ja nmax
%  2. % ab=bisekt(f,[-2,5],0.00001) % Oletus-nmax
%  3. % ab=bisekt(f,[-2,5],0.00001,100)

a(1)=vali(1);b(1)=vali(2);

if nargin < 4
   nmax=1000;      % oletus-maxiter = 1000
end;

if nargin==2
   tol=eps;        % Oletustoleranssi = "kone-epsilon"
end;
i=1;
fa=feval(fun,a(i));fb=feval(fun,b(i));

if sign(fa) == sign(fb)
   error('Funktio ei saa erimerkkisiä arvoja päätepisteissä')
end;

while ( (b(i)-a(i) > tol) & (i < nmax ) )
  x0=(a(i)+b(i))/2;
  f0=feval(fun,x0);

  if (abs(f0)<eps)             % Välin keskellä oleva 0-kohtamahdollisuus
       a(i)=x0;b(i)=x0;        % otettava huomioon (esim. 1 yllä)
       valit=[a' b']; return;
  end; 

   if ( sign(fa) == sign(f0)  )
     a(i+1)=x0; b(i+1)=b(i);fa=f0;  
   elseif  ( sign(fb) == sign(f0) )
     a(i+1)=a(i); b(i+1)=x0;fb=f0; 
   end;
   i=i+1;
end;
valit=[a' b'];







