function r = demo_fixpunkt(x,fnc,small)

% fixpunkt berechnet den Fixpunkt  der Function fnc mit Hilfe der
% Fixpunktiteration. Die Anfangsiterierte ist x. Die Funktion
% muss als m-File bereitgestellt werden.
% Die Iteration wird beendet wenn die Differenz zweier aufeinanderfolgenden
% Iterierten klein ist: |x^-x^x+1| < small
% Beispiel x= 0, fnc='cos', small=1.e-5.
% Der Aufruf ist r = demo_fixpunkt(x,fnc,small)

%=================================================================
 if isstr(fnc)~=1;
   error('fnc muss ein String sein');
 end
%=================================================================
 clf
 x_alt = x-2*small; 
 i = 0;
  
 xx(1) = x;
 fx(1) = feval(fnc,xx(1));

% Die Iteration.
 while norm(x-x_alt) > small;
   i = i + 1;
   if i>20000; 
     error('excessive iterations (iter = %d)',i-1);
   end
   x_alt = x;
   x = feval(fnc,x);
   s = sprintf('Iteration %d Iterierte %g Funktionswert %g Differenz %g',...
               i, x,  feval(fnc,x), abs(x-feval(fnc,x)));
   disp(s);
   xx(i+1) = x;
   fx(i+1) = feval(fnc,xx(i+1));
 end

maxite = i;
r = x;

% plot picture of the function

 if imag(r)==0
   steps = 1000;
   interval = 1.0;
   length = 2*interval/steps;
   start = r - interval;
   for i=0:steps
     x(i+1) = start + i*length;
     y(i+1) = feval(fnc,x(i+1));
     y1(i+1) = x(i+1) ;
     z(i+1) = 0;
   end
 
   plot(x,y,'-b',x,z,':r',x,y1,'-g' );
   hold on;
 end

 
for j=1:maxite+1
    plot(xx(j),fx(j),'ok');
    pause() 
    hold on  
end    






