exponenta event banner

Решить уравнения хищника-добычи

Этот пример показывает, как решить дифференциальное уравнение, представляющее модель хищника/добычи, используя оба ode23 и ode45. Эти функции предназначены для численного решения обыкновенных дифференциальных уравнений с использованием методов интегрирования Рунге-Кутты переменного размера шага. ode23 использует простую пару формул 2-го и 3-го порядка для средней точности и ode45 использует пару 4-го и 5-го порядка для более высокой точности.

Рассмотрим пару обыкновенных дифференциальных уравнений первого порядка, известных как уравнения Лотка-Вольтерра, или модель хищник-добыча:

dxdt = x-αxydydt = -y + βxy.

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

Уравнения кода

Чтобы смоделировать систему, создайте функцию, которая возвращает вектор столбца производных состояний с заданными значениями состояния и времени. Две переменные x и y могут быть представлены в MATLAB как первые два значения в векторе y. Аналогично, производные являются первыми двумя значениями в векторе. yp. Функция должна принимать значения для t и y и возвращает значения, полученные из уравнений в yp.

yp(1) = (1 - alpha*y(2))*y(1)

yp(2) = (-1 + beta*y(1))*y(2)

В этом примере уравнения содержатся в файле с именем lotka.m. В этом файле используются значения параметров α = 0,01 и β = 0,02.

type lotka
function yp = lotka(t,y)
%LOTKA  Lotka-Volterra predator-prey model.

%   Copyright 1984-2014 The MathWorks, Inc.

yp = diag([1 - .01*y(2), -1 + .02*y(1)])*y;

Моделирование системы

Использовать ode23 для решения дифференциального уравнения, определенного в lotka за интервал 0 < t < 15. Используйте начальное условие x (0) = y (0) = 20, чтобы популяции хищников и добычи были равны.

t0 = 0;
tfinal = 15;
y0 = [20; 20];   
[t,y] = ode23(@lotka,[t0 tfinal],y0);

Результаты графика

Постройте график результирующих популяций по времени.

plot(t,y)
title('Predator/Prey Populations Over Time')
xlabel('t')
ylabel('Population')
legend('Prey','Predators','Location','North')

Figure contains an axes. The axes with title Predator/Prey Populations Over Time contains 2 objects of type line. These objects represent Prey, Predators.

Теперь постройте графики популяций друг против друга. Результирующий график фазовой плоскости делает циклическую взаимосвязь между популяциями очень ясной.

plot(y(:,1),y(:,2))
title('Phase Plane Plot')
xlabel('Prey Population')
ylabel('Predator Population')

Figure contains an axes. The axes with title Phase Plane Plot contains an object of type line.

Сравнение результатов различных решателей

Повторное решение системы с помощью ode45, вместо ode23. ode45 решатель занимает больше времени для каждого шага, но он также занимает больше шагов. Тем не менее, выход ode45 является гладким, потому что по умолчанию решатель использует формулу непрерывного расширения для получения выходных данных в четырех равномерно разнесенных точках времени в диапазоне каждого выполненного шага. (Можно настроить количество точек с помощью 'Refine' вариант.) Постройте график обоих решений для сравнения.

[T,Y] = ode45(@lotka,[t0 tfinal],y0);

plot(y(:,1),y(:,2),'-',Y(:,1),Y(:,2),'-');
title('Phase Plane Plot')
legend('ode23','ode45')

Figure contains an axes. The axes with title Phase Plane Plot contains 2 objects of type line. These objects represent ode23, ode45.

Результаты показывают, что решение дифференциальных уравнений с помощью различных численных методов может дать несколько другие ответы.

См. также

|

Связанные темы