function logistischeGleichung()
%
%     logistischeGleichung() plottet die Grenzwerte der Folge der 
%     logistischen Gleichung
%       x(k+1) = lambda * x(k) * (1-x(k))
%     Anfangseinstellung ist lambda = 0:0.002:4
%     Als Resultat wird in (lambda,x) geplottet. 
%     Das Programm durchlaeuft eine Endlos-Schleife. Folgende Parameter
%     koennen durch Druecken einiger Tasten waehrend der Berechnung
%     geaendert werden: 
%     L     neue Wahl von lambda. Eingeben in der Form 0:0.002:4
%     h     umschalten zwischen "hold on" und "hold off", dh kummulatives
%           plotten der Folgenglieder oder nicht
%     n     neue Anfangswerte (Zufallsgenerator)
%     x     neue Grezen fuer x bestimmen, im Matlab Format eingeben
%           (zB: [0.5 0.7])
%     Esc   Programmabbruch
%

global lambda;         % Vektor Lambda fuer das Intervall [lam_min,lam_max]
global x;              % Vektor fuer das Intervall [x_min,x_max]
global xl;             % Plotgrenzen fuer lambda
global yl;             % Plotgrenzen fuer x
global animationruns;  % Variable fuer Endlosschleife


animationruns = 1;

lambda = 0:0.002:4; 
x = rand(1,size(lambda,2));

xl=[lambda(1) lambda(end)];
yl = [0 1];

f = figure('KeyPressFcn','keypress','paperpositionmode','auto');

% Endlosschleife: 

while animationruns
    x = lambda .* x .* (1-x);
    plot(lambda,x,'.k','markersize',1);
    xlabel('\lambda');
    ylabel('x');
    xlim(xl);
    ylim(yl);
    drawnow;
end
set(gcf,'KeyPressFcn',[]);




% Funktion fuer die Uebergabe der Tastenbetaetigungen waehrend des
% Programdurchlaufs:

function keypress()
global lambda;
global x;
global xl;
global yl;
global animationruns;

key = get(gcbf,'currentcharacter');
switch (key)
case 'L'
    ans = inputdlg('Anfang:Schritt:Ende von lambda');
    lambda = eval(ans{1});
    xl=[lambda(1) lambda(end)];
    x = rand(1,size(lambda,2));
    hold off;
case 'h'
    hold;
case 'n'
    x = rand(1,size(lambda,2));
    hold off;
case 'x'
    ans = inputdlg('Display-Grenzen für x (y-Achse), [Anfangswert,Endwert]');
    yl=eval(ans{1});
case 27
    animationruns = 0;
end