Как решить и построить дифференциальные уравнения Лотка-Вольтерра в Matlab - PullRequest
3 голосов
/ 04 февраля 2012

Мне было интересно, сможет ли кто-нибудь помочь мне решить уравнения Лотки-Вольтерры с помощью MatLab. Кажется, мой код не работает. Я делаю следующее:

Шаг 1 -

Я создал файл с названием pred_prey_odes.m, содержащий следующий код:

% the purpose of this program is to model a predator prey relationship 
% I will be using the Lotka-Volterra equations 

% Program consists of the following differential equations: 
% dY1/dt = a * Y1 - c * Y1 * Y2
% dY2/dt = b * Y2 - d * Y1 * Y2 

function dy = pred_prey_odes(t, y) 
% function that is to be integrated 

%select constants 
a = 1;  
b = 2;  
c = 3; 
d = 4; 

%set up differential equations 
dy = zeros(2,1); 
dy(1) = a * y(1) - c * y(1) * y(2); 
dy(2) = b * y(2) - d * y(1) * y(2); 

Я сохранил файл и убедился, что он находится в текущем каталоге, прежде чем вводить следующий код в командном окне:

clc
tspan = [0, 20]; 
y0 = [10; 10]; 
ode = @(t, y) pred_prey_odes(t, y); 
[t, y] = ode45(ode, tspan, y0); 
plot (t,y)

Однако сюжет не появляется. На самом деле в Matlab ничего не происходит, и я даже не могу очистить командное окно. Если я наберу clc, ничего не произойдет ...

Любая помощь будет принята с благодарностью!

Спасибо!

-Снеха Ингува

1 Ответ

4 голосов
/ 04 февраля 2012

Ваш код в порядке.При таком выборе параметров хищники просто вымирают, и добыча демонстрирует экспоненциальный рост.Поскольку значение переменной хищника крошечное, ode45 считает, что для правильного разрешения нужно предпринять действительно крошечные шаги.Например, я запустил ваш код с tspan = [0,10], а количество временных шагов составило 227485.

Возможно, вам повезет больше, либо изменив параметры, либо, если это действительно параметры, которые вас интересуютВы могли бы использовать ode23, который должен иметь возможность делать большие временные шаги из-за его свойств стабильности.Однако это может быть слишком медленно.По сути, ваша проблема в том, что MATLAB пытается контролировать относительную ошибку, основанную на переменной хищника, которая крошечная и по сути бессмысленная.Если бы вы применили свой собственный метод RK4, у которого не было адаптивного пошагового перехода, он, вероятно, работал бы нормально.

EDIT Во втором уравнении есть ошибка знака.Исправление, которое должно давать колебания вместо исчезновения хищников.

...