Contents

Wolf-Hase: Räuber-Beute-Modell

System zweier gekoppelter ODES. Siehe auch die Lotka-Volterra-Gleichungen.

clear; clc; close all
disp(datetime)
   31-Oct-2025 16:33:17

Parameter der Evolutionsgleichungen festlegen

alpha = 8.5;    % Todesrate der Woelfe
beta  = 10;     % Vermehrungsrate der Hasen
gamma = 0.01;   % Nachwuchsrate der Woelfe (dank Beute=Hasen)
delta = 0.07;   % Todesrate der Hasen (durch die Jaeger=Woelfe)


tau  = 1/1000;  % Schrittweite in der Zeit
tend = 2;       % Endzeit

Anfangspopulationen

wolf(1) = 100;
hase(1) = 1000;

Zeititeration

Anzahl der Zeitschritte

nt = tend/tau;
wolf(nt) = 0;         % Stellt Speicher fuer alle benoetigten Vektorelemente bereit.
hase(nt) = 0;

for m = 2:nt
    wolf(m) = wolf(m-1) -tau*alpha*wolf(m-1) + tau*gamma*wolf(m-1)*hase(m-1);
    hase(m) = hase(m-1) +tau*beta *hase(m-1) - tau*delta*wolf(m-1)*hase(m-1);
end

Ergebnisse anzeigen

figure(1)
[AX,H1,H2] = plotyy(1:nt,wolf,1:nt,hase);
title('Räuber-Beute-Modell (numerisch)');
xlabel('Zeit');
set(H1,'LineStyle','--')
set(H2,'Color','r')
set(get(AX(1),'Ylabel'),'String','Wölfe')
set(get(AX(2),'Ylabel'),'String','Hasen')
set(get(AX(2),'Ylabel'),'Color','r')
% set(get(AX(2),'Yaxis'),'YColor','r')
% ylabel('Hasen','Color',[1 0 0]);

saveas(gcf,'wolf_hase.jpg');    % Speicher die aktuelle Grafik als jpg-File

Und jetzt über die ODEs

siehe: doc ode

figure(2)
F = ode;
F.InitialValue = [wolf(1), hase(1)];
F.ODEFcn = @(t,y) [-alpha*y(1)+gamma*y(1)*y(2);
                     beta*y(2)-delta*y(2)*y(1) ];

S=solve(F,0,tend);
plot(S.Time,S.Solution,"-o")
title('Räuber-Beute-Modell (analytisch)');
legend("wolf","hase",Location="southeast")

saveas(gcf,'wolf_hase_ode.jpg');

Und nochmal ODEs aber mit SensitivityF = ode;

p = [alpha, beta, gamma, delta];             % sensitivity variables
F = ode;
F.InitialValue = [wolf(1), hase(1)];
F.ODEFcn = @(t,y) [-p(1)*y(1)+p(3)*y(1)*y(2);
                    p(2)*y(2)-p(4)*y(2)*y(1) ];

F = ode(ODEFcn=@(t,y,p) [-p(1)*y(1)+p(3)*y(1)*y(2); p(2)*y(2)-p(4)*y(2)*y(1)], ...
        InitialValue=[wolf(1), hase(1)], ...
        Parameters=p, ...
        Sensitivity=odeSensitivity)

S=solve(F,0,tend);
plot(S.Time,S.Solution,"-o")
title('Räuber-Beute-Modell (analytisch)');
legend("wolf","hase",Location="southeast")

saveas(gcf,'wolf_hase_ode.jpg');
F = 

  ode with properties:

   <strong>Problem definition</strong>
               ODEFcn: [function_handle]
           Parameters: [8.5000 10 0.0100 0.0700]
          InitialTime: 0
         InitialValue: [100 1000]
          Sensitivity: [1×1 odeSensitivity]
         EquationType: standard

   <strong>Solver properties</strong>
    AbsoluteTolerance: 1.0000e-06
    RelativeTolerance: 1.0000e-03
               Solver: auto
       SelectedSolver: cvodesnonstiff

  Show <a href="matlab:if exist('F','var'), ode.displayAll('F',F,'ode'); else, ode.displayAll('F'), end">all properties</a>


jetzt die Sensitivity

figure(3)
subplot(1,2,1)
hold on
plot(S.Time,squeeze(S.Sensitivity(1,1,:)),"-o")
plot(S.Time,squeeze(S.Sensitivity(1,2,:)),"-o")
plot(S.Time,squeeze(S.Sensitivity(1,3,:)),"-o")
plot(S.Time,squeeze(S.Sensitivity(1,4,:)),"-o")
legend("alpha,wolf","beta,wolf","gamma,wolf","delta,wolf")
title("Sensitivity regarding wolf equation.")
hold off

subplot(1,2,2)
hold on
plot(S.Time,squeeze(S.Sensitivity(2,1,:)),"-o")
plot(S.Time,squeeze(S.Sensitivity(2,2,:)),"-o")
plot(S.Time,squeeze(S.Sensitivity(2,3,:)),"-o")
plot(S.Time,squeeze(S.Sensitivity(2,4,:)),"-o")
legend("alpha","beta","gamma","delta")
title("Sensitivity regarding hare equation.")
hold off