2016-03-31 2 views
0

Im пытается получить MATLAB, чтобы отобразить график добычи против predetorMATLAB ошибка в строке с 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 

Дело в том, чтобы отобразить динамическую связь между популяциями двух видов, обитающих в той же среде.

Эти два производных (dxdt (1) и dxdt (2)) модели скорость изменения каждой популяции

Im tryint использовать метод Рунге-Кутта Интеграции, чтобы получить участок населения против времени , из двух видов

ошибка просто говорит:

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

Im очень озадачен любая помощь будет большим

+0

Вы уверены, что это то, что вся * * ошибка говорит? – excaza

+0

О да, жаль, что есть еще. Сначала он сказал непризнанную двойную «lotka_volterra», затем я избавился от кавычек, он сказал, что не хватает аргументов, а затем добавляет аргументы, которые он говорит Попытка получить доступ к x (2); index за пределами границ, потому что numel (x) = 1. Ошибка в испытании> lotka_volterra (строка 16) dxdt (1) = a * x (1) - b * x (1) * x (2); –

ответ

1

Вы можете использовать функцию ручки:

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

или медленнее, но, может быть яснее:

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

Спасибо, что исправил это! оба работают просто отлично –

+0

@GeorgeDziouba Рад, что я мог бы помочь. –