Lotka-Volterra predator-prey model in Matlab



  • Ich muss das Lotka-Volterra predetaor-prey model in Matlab implementieren, d.h. ich muss folgendes Gleichungssystem (numerisch) loesen:

    \begin{equation} \dot{u} = (\alpha\_1 - \beta\_1 v)u,\quad u(0) = 100 \\ \dot{v} = (\alpha\_2 - \beta\_2 u)v,\quad v(0) = 5 \\ \end{equation}

    u(t)u(t) ist dabei die Beute und v(t)v(t) die Raeuber. Die Konstanten sind gegeben durch α_1=3,α_2=2,β_1=β_2=0.1\alpha\_1 = 3,\; \alpha\_2 = 2,\; \beta\_1 = \beta\_2 = 0.1.

    Mein Matlab-Code sieht wie folgt aus:

    a1 = 3; a2 = 2;
        b1 = 0.1; b2 = 0.1;
    
        dy = @(t,y) [ (a1 - b1*y(2)) * y(1) ; -(a2 - b2*y(1)) * y(2) ];
        y0 = [100; 5];
    
        ops = odeset('RelTol', 100*eps, 'AbsTol', eps);
        [t y] = ode45(dy, [0 10], y0, ops);
    

    Wenn ich den Code (mit Octave) ausfuehre bekomme ich folgende Warunungen/Fehler:

    warning: Option "InitialStep" not set, new value 1.000000 is used
    warning: Option "MaxStep" not set, new value 1.000000 is used
    error: Solving has not been successful. The iterative integration loop exited at time t = 1.459670 before endpoint at tend = 10.000000 was reached. This may happen if the stepsize grows smaller than defined in vminstepsize. Try to reduce the value of "InitialStep" and/or "MaxStep" with the command "odeset".

    Kann mir jemand sagen was ich falsch mache?

    *Edit
    Im Code verwende ich y, das wie folgt definiert ist:
    y(t)=(u(t),v(t))T,y0=(u(0),v(0))Ty(t) = (u(t),v(t))^T,\quad y0 = ( u(0), v(0) )^T



  • Steht doch da: die maximale Schrittweiten sind (viel) zu groß und Octave hat dafür offenbar keine so guten initialen Schätzer wie Matlab. (In Matlab produziert dein Code das korrekte Ergebnis.) Dreh sie mal runter ...



  • Daniel E. schrieb:

    Steht doch da: die maximale Schrittweiten sind (viel) zu groß und Octave hat dafür offenbar keine so guten initialen Schätzer wie Matlab. (In Matlab produziert dein Code das korrekte Ergebnis.) Dreh sie mal runter ...

    Achso, dann liegt das nur daran. Ich hatte angenommen, dass ich sonst irgendwo einen Fehler gemacht habe.

    Ich werde dann mal manuell die Schrittweite veraendern. Danke dir 👍


Anmelden zum Antworten