WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Evolutionsmodell entwickeln

 

Jevermausi
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 11.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2020, 09:47     Titel: Evolutionsmodell entwickeln
  Antworten mit Zitat      
Hallo, ich bräuchte Hilfe bei einem einfachen Evolutionsmodell, das Rossberg in seiner Arbeit Food webs: Experts consuming families of experts verwendet.

Es geht darum, dass pro Iterationsschritt eine Aktion durchgeführt wird, um die Artenanzahl im Biotop zu ändern. Zu den Aktionen gehören (Einwanderung, Aussterben, Spezifikation). Diese passieren mit folgenden Raten (Einwanderung = r1, Aussterben = r_m, Spezifikation = r_p). Nun habe ich versucht das Modell in Matlab zu programmieren, komme aber nicht weiter. In einem steady state sollte die Artenanzahl wie folgt sein r1/(r_m-r_p). Bei mir ist die Artenanzahl aber nur bei 0,48
Mein Code sieht bisher wie folgt aus

Code:
function dN = Funktion(t, N , r1, r_m, r_p)

dN = zeros(1,1);    % Artenanzahl


% Summe
Sum = r1 + (r_m+r_p) * N;   %Gesamtwahrscheinlichkeit

% Zufallszahl ziehen
p = rand();

if p < r1/Sum                        % mit dieser Wahrscheinlichkeit tritt eine Einwanderung ein
    dN = 1 ;                            % Bei Einwanderung erhöht sich Artenzahl um eine Art
 
else                                       % Wenn keine Einwanderung, dann entweder
                                             Aussterben oder Spezifikation
    p1 = rand();

    if p1 < r_m/(r_m+r_p)      % Wahrscheinlichkeit, dass Extinktion eintritt
        dN = (-1);                     % Artenanzahl wird um eine Art verringert
       
    else
        dN = 0;                         % Spezifikation, Artenanzahl bleibt gleich
       
    end

end







Im Hauptprogramm steht dann:
r1 = 0.48;
r_m = 1.0;
r_p = 0.9918;

N_R = 0;                   % Startwert für Artenanzahl

tspan = [0 100];


[t, dN] = ode45(@(t,N) Funktion(t, N,  r1, r_m, r_p),tspan, N_R);
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.12.2020, 10:56     Titel:
  Antworten mit Zitat      
Hallo,

handelt es sich dabei denn wirklich um eine Differenzialgleichung y' = f(t, y) oder vielleicht eher um eine Differenzengleichung y(k+1) = f(t, y(k))? Für den letzteren Fall ist ode45 nicht geeignet. Die Iteration würde ich da selbst programmieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Jevermausi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 11.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2020, 10:59     Titel:
  Antworten mit Zitat      
Ich war mir selbst nicht sicher, ob eine Differentialgleichung da passt.

Wie würdest du die Differenzengleichung denn dann programmieren? Wird das als Schleife gemacht?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.12.2020, 11:21     Titel:
  Antworten mit Zitat      
Hallo,

genau, etwa so:

Code:
N = zeros(1, 101);
N(1) = N_R;
for k = 2:101
     N(k) = Funktion([], N(k-1) , r1, r_m, r_p)
end


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Jevermausi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 11.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2020, 11:23     Titel:
  Antworten mit Zitat      
Vielen Dank, das probiere ich gleich mal aus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.