function r = sekante(x1,x2,fnc,small)

% Sekante berechnet die Nullstelle der Function fnc mit Hilfe des
% Sekanten-Verfahrens. Das Anfangsiterierten sind x1, x2. Die Funktion
% muss als m-File bereitgestellt werden.
% Die Iteration wird beendet wenn die Differenz zweier aufeinanderfolgenden
% Iterierten klein ist: |f1-f2| < small
% Beispiel x1=1, x2 =2, fnc='cos', small=1.e-3
% Der Aufruf ist r = sekante(x1,x2,fnc,small)

%=================================================================
 if isstr(fnc)~=1;
   error('fnc muss ein String sein');
 end
%=================================================================
 if (norm(x1-x2)<1e-10) 
   error('Die Anfangsiterierten sind zu dicht beieinander.');
 end

 x = x2;  		 
 dx = 2*small;        
 i = 0;
 fx1 = feval(fnc,x1);
 
% Die Iteration.
 while norm(dx) > small;
   i = i + 1;
   if i>50; 
     error('zu viele Iterationen (iter = %d)',i-1);
   end
   fx2 = feval(fnc,x2);  
   dx = (x2-x1)/(fx2-fx1)*fx2;
   x1 = x2;
   fx1 = fx2;
   x2 = x2 - dx;
   s = sprintf('Iteration %d Iterierte %g Funktionswert %g',...
               i, x2, feval(fnc,x2));
   disp(s);
 end

r = x2;
s = sprintf('Nullstelle %g',r);  
disp(s);




