2016-03-31 5 views
0

Im Versuch, Matlab zu erhalten eine grafische Darstellung der Beute vs Predetor anzuzeigenMATLAB Fehler in Zeile mit ode45

function [ output_args ] = Untitled(input_args) 

    options = odeset('RelTol', 1e-4, 'NonNegative', [1 2]); 

    [t,x] = ode45('lotka_volterra', [0 30], [2 1], options); 

    plot(t,x); 
    legend('prey', 'predators'); 

end 


function dxdt = lotka_volterra(t,x) 

    a  = 1.2; 
    b  = 0.6; 
    d  = 0.3; 
    gamma = 0.8; 

    dxdt = [0;0]; 
    dxdt(1) = a * x(1) - b * x(1) * x(2); 
    dxdt(2) = d * x(1) * x(2) - gamma * x(2); 

end 

Der Punkt ist, die dynamische Beziehung zwischen den Populationen von zwei Arten in der gleichen Umgebung leben angezeigt werden soll.

Die beiden Derivate (dxdt (1) und dxdt (2)) Modell, um die Änderungsrate der jeweiligen Bevölkerung

Im tryint die Runge-Kutta Methode der Integration zu verwenden, um die Handlung der Bevölkerung gegen die Zeit zu erhalten , der beiden Arten

der Fehler sagt nur:

Error in Untitled (line 3) 
[t,x] = ode45(@(t,x) lotka_volterra, [0 30], [2 1]); 

Im jede Hilfe wäre toll sehr stapfte

+0

Sind Sie sicher, dass das, was die * ganze * Fehler sagt? – excaza

+0

Oh ja Entschuldigung, es gibt mehr. Zuerst sagte es unerkanntes Doppel 'lotka_volterra', dann wurde ich die Anführungszeichen los, es sagte nicht genug Argumente, dann fügte ich Argumente hinzu Versuch, auf x (2) zuzugreifen; Index außerhalb der Grenzen, weil numel (x) = 1. Fehler in der Studie> lotka_volterra (Zeile 16) dxdt (1) = a * x (1) - b * x (1) * x (2); –

Antwort

1

Sie könnten die Funktion Griff verwenden möchten:

[t,x] = ode45(@lotka_volterra, [0 30], [2;1], options); 

oder langsamer, aber vielleicht deutlicher:

[t,x] = ode45(@(t,x) lotka_volterra(t,x), [0 30], [2;1], options); 
+0

Danke das repariert es! beide funktionieren ganz gut –

+0

@GeorgeDziouba Froh, dass ich helfen konnte. –