function Aufgabe4 

dbstop if error  % sobald ein Fehler im code ist, erhält man an der Stelle Zugriff auf den workspace (siehe "keyboard")

% Werte aus der Aufgabe
T=10;
h=.0005;
y0=[10,1];
r=[2,4];
f=[2,1];
% berechne Lösung
[y1,y2]=RaeuberBeute(T,h,y0,r,f);

% time interval (for plots)
t = 0:h:T;
 
% a-Teil
figure(1)
plot(t(:), y1,'k',0:h:T,y2,'g-')
legend('Beute','Rauber','Location','Best'); % Legende im plot
title('Raeuber (y2) und Beute (y1) ueber t')
xlabel('Zeit t')
ylabel('y1,y2')

%% Bonus - schrittweiter Plot

figure(2)
hold on
xlabel('Zeit t')
ylabel('Population y(t)')
axis([0,T,0,max(max(y1,y2))+1]) % set fixed axis (corresponding to the data) to speed up the plot
title('Raeuber (y2) und Beute (y1) ueber t')
% initialize bot data plots with initial values and give them handles h and g
h = plot(t(1),y1(1),'k');
g = plot(t(1),y2(1),'g-');
legend('Beute','Rauber','Location','NorthEast'); % fixed position of the legend speeds up plot
for i = 2:length(t)
    % instead of the plot function we use the set command to directly
    % modify the x and y data of each - to be plotted -line. This is much
    % faster than the plot function and helps, since in this case the data
    % set to be plotted is quite large.
    set(h,'xdata',t(1:i),'ydata',y1(1:i)); 
    set(g,'xdata',t(1:i),'ydata',y2(1:i)); 

    drawnow;
end
%%

% b-Teil
figure(3)
plot(y1,y2)
title('Raeuber (y2) über Beute (y1) geplottet')
xlabel('y1')
ylabel('y2')

%% Bonus - schrittweiter Plot

figure(4)
hold on
xlabel('y1')
ylabel('y2')
axis([min(y1)-0.5,max(y1)+0.5,min(y2)-0.5,max(y2)+0.5]) % set fixed axis to speed up the plot
title('Raeuber (y2) über Beute (y1) geplottet')
% initialize bot data plots with initial values and give them handles h and g
h = plot(y1(1),y2(1));
for i = 2:length(t)
    % instead of the plot function we use the set command to directly
    % modify the x and y data of each - to be plotted -line. This is much
    % faster than the plot function and helps, since in this case the data
    % set to be plotted is quite large.
    set(h,'xdata',y1(1:i),'ydata',y2(1:i)); 
    drawnow;
end
%%




function [y1,y2] = RaeuberBeute(T,h,y0,r,f)
%Explizites Euler-Verfahren 
%
%T... Endzeitpunkt
%h... Zeitschrittweite
%y0... Startwerte der Populationen
%r,f... Wachstumsraten
%y1,y2... Anzahl der jeweiligen Individuen (y1 -> Beute, y2 -> Räuber)

% Deklarierung/Initialisierung:
N = T/h; % nehme an, dass T und h vernünftig gewählt sind
y1 = zeros(N+1,1); % Es gibt N+1 Punkte
y2 = zeros(N+1,1);
% Anfangswerte
y1(1) = y0(1);
y2(1) = y0(2);

% Verfahren mit Vorwärtsdifferenzenquotienten und äquidistanter Schrittweite
for j=1:T/h
    y1(j+1)=y1(j)+h*(r(1)*y1(j)-f(1)*y1(j)*y2(j));
    y2(j+1)=y2(j)+h*(-r(2)*y2(j)+f(2)*y1(j)*y2(j));    
end

