function mandel(nx,ny,xlim,ylim,maxz,maxiter)
% mandel(nx,ny,xlim,ylim,maxz,maxiter)
% Generiert eine Grafik der Mandelbrotmenge
% Eingabeparameter:
% nx:       Anzahl der Punkte in Realteil-Richtung (Default: 301)
% ny:       Anzahl der Punkte in Imaginaerteil-Richtung (Default: 301)
% xlim:     Bereich des Realteils (Default: -2.3,.7)
% ylim:     Bereich des Imaginaerteils (Default: -1.5,1.5)
% maxz:     Schranke ab der Divergenz (Default: 2)
% maxiter:  Anzahl der Iterationen (Default=50)


% Autor: Jörg Hörner
% Letzte Änderung: 16. 02. 2005

% Abfrage der Uebergabeparameter und setzen der Default-Werte

if (~exist('nx','var') || isempty(nx))
  nx=301;
end

if (~exist('ny','var') || isempty(ny))
  ny=301;
end

if (~exist('xlim','var') || isempty(xlim))
  xlim=[-2.3,.7];
end

if (~exist('ylim','var') || isempty(xlim))
  ylim=[-1.5,1.5];
end

if (~exist('maxz','var') || isempty(maxz))
  maxz=2;
end

if (~exist('maxiter','var') || isempty(maxiter))
  maxiter=50;
end

% Initialisierung
[x,y]=meshgrid(linspace(xlim(1),xlim(2),nx),linspace(ylim(1),ylim(2),ny));
w=x+sqrt(-1)*y;
z=zeros(size(w));
iter=z;
ind=1:prod(size(w));

% Berechnungsschleife
for n=1:maxiter
  % Test und Berechnung nur fuer relevante Indizes
  ind=ind(find(abs(z(ind))<maxz));
  z(ind)=z(ind).^2+w(ind);
  iter(ind)=n;
end

% Visualisierung
surf(x,y,iter)
view(2)
axis equal
axis image
shading interp
