МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра БТС
отчет
по лабораторной работе №1
по дисциплине «МБПиС»
Тема: Модель Лотки-Вольтерры
Студент гр. 7501 |
|
Исаков А.О. |
Преподаватель |
|
Скоробогатова А.И. |
Санкт-Петербург
2020
Цели и задачи работы: необходимо написать программу с возможностью интерактивного задания параметров модели.
Ход работы модели:
Задание параметров модели (alpha, beta, gamma, delta, c и d) в [0, 1], а также x0 и y0 (начальные значения популяции).
Расчет значений функции F в зависимости от значений параметров.
Расчет численности. Решение дифференциальных уравнений. Функция Matlab: ode45(F, [t0 tmax], [x0; y0])
Построение графика зависимости численности жертв и хищников от времени (x(t), y(t) и графика зависимости численности жертв от хищников y(x)). На графиках необходимо отметить точками x0 и y0.
Основные теоретические положения:
Классический случай:
, где
x – численность жертв (травоядных);
y – численность хищников;
– вероятность того, что травоядные размножатся;
– вероятность того, что травоядное будет съедено;
– вероятность того, что хищник умрет от голода;
– вероятность того, что хищнику хватит еды на дальнейшее размножение.
Допущения:
Количество пищи для травоядных не ограничено;
Ни жертвы, ни хищники не эмигрируют из среды;
Никакие другие животные не мигрируют в среду;
Данная модель не учитывает вымирание животных по причине старения и прочих внешних воздействий.
Рисунок 1 – Графики отношения численности популяции хищник/жертва относительно времени и друг друга
Учет миграции:
, где
Постоянная миграция
Непостоянная миграция
Рисунок 2 – Графики отношения численности популяции хищник/жертва относительно времени и друг друга c учетом миграции
Ход выполнения лабораторной работы
Программный код в App Designer:
classdef Laba_1 < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure
AlphaSliderLabel matlab.ui.control.Label
AlphaSlider matlab.ui.control.Slider
Button matlab.ui.control.Button
BettaSliderLabel matlab.ui.control.Label
BettaSlider matlab.ui.control.Slider
GammaSliderLabel matlab.ui.control.Label
GammaSlider matlab.ui.control.Slider
DeltaSliderLabel matlab.ui.control.Label
DeltaSlider matlab.ui.control.Slider
Label matlab.ui.control.Label
Slider matlab.ui.control.Slider
Label_2 matlab.ui.control.Label
Slider_2 matlab.ui.control.Slider
X0SliderLabel matlab.ui.control.Label
X0Slider matlab.ui.control.Slider
Y0SliderLabel matlab.ui.control.Label
Y0Slider matlab.ui.control.Slider
UIAxes matlab.ui.control.UIAxes
UIAxes2 matlab.ui.control.UIAxes
end
% Callbacks that handle component events
methods (Access = private)
% Button pushed function: Button
function ButtonPushed(app, event)
a = app.AlphaSlider.Value;
b = app.BettaSlider.Value;
g = app.GammaSlider.Value;
d = app.DeltaSlider.Value;
c = app.Slider.Value;
d1 = app.Slider_2.Value;
x0 = app.X0Slider.Value;
y0 = app.Y0Slider.Value;
if x0 == 0
x0 = 20;
set(app.X0Slider,"Value",20);
end
if y0 == 0
y0 = 30;
set(app.Y0Slider,"Value",30);
end
ode = @(time,state) [a*state(1) - b*state(1)*state(2)+c/state(1); -g*state(2) + d*state(1)*state(2)+d1/state(2)];
[time,state] = ode45(ode, [0 100], [x0 y0]);
plot(app.UIAxes,time,state,0,x0,'r.',0,y0,'r.','MarkerSize',15);
title(app.UIAxes,'Отношение популции хищник/жертва от времени')
xlabel(app.UIAxes,'Время')
ylabel(app.UIAxes,'Числ. популяции')
legend(app.UIAxes,'Жертвы','Хищники','Location','Northeast')
app.UIAxes.XLim = [0 100];
app.UIAxes.XTick = 0:10:100;
plot(app.UIAxes2,state(:,1),state(:,2),0,y0,'r.',x0,0,'r.','MarkerSize',15)
title(app.UIAxes2,'Зависимость популяции хищников от жертв')
xlabel(app.UIAxes2,'Популяция жертв')
ylabel(app.UIAxes2,'Популция хищников')
end
end
% Component initialization
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create UIFigure and hide until all components are created
app.UIFigure = uifigure('Visible', 'off');
app.UIFigure.Position = [100 100 866 670];
app.UIFigure.Name = 'MATLAB App';
% Create AlphaSliderLabel
app.AlphaSliderLabel = uilabel(app.UIFigure);
app.AlphaSliderLabel.HorizontalAlignment = 'right';
app.AlphaSliderLabel.Position = [133 417 36 22];
app.AlphaSliderLabel.Text = 'Alpha';
% Create AlphaSlider
app.AlphaSlider = uislider(app.UIFigure);
app.AlphaSlider.Limits = [0 1];
app.AlphaSlider.Position = [190 426 150 3];
% Create Button
app.Button = uibutton(app.UIFigure, 'push');
app.Button.ButtonPushedFcn = createCallbackFcn(app, @ButtonPushed, true);
app.Button.Position = [689 351 100 22];
app.Button.Text = 'Пересчитать';
% Create BettaSliderLabel
app.BettaSliderLabel = uilabel(app.UIFigure);
app.BettaSliderLabel.HorizontalAlignment = 'right';
app.BettaSliderLabel.Position = [133 361 34 22];
app.BettaSliderLabel.Text = 'Betta';
% Create BettaSlider
app.BettaSlider = uislider(app.UIFigure);
app.BettaSlider.Limits = [0 1];
app.BettaSlider.Position = [188 370 150 3];
% Create GammaSliderLabel
app.GammaSliderLabel = uilabel(app.UIFigure);
app.GammaSliderLabel.HorizontalAlignment = 'right';
app.GammaSliderLabel.Position = [120 308 48 22];
app.GammaSliderLabel.Text = 'Gamma';
% Create GammaSlider
app.GammaSlider = uislider(app.UIFigure);
app.GammaSlider.Limits = [0 1];
app.GammaSlider.Position = [189 317 150 3];
% Create DeltaSliderLabel
app.DeltaSliderLabel = uilabel(app.UIFigure);
app.DeltaSliderLabel.HorizontalAlignment = 'right';
app.DeltaSliderLabel.Position = [135 256 34 22];
app.DeltaSliderLabel.Text = 'Delta';
% Create DeltaSlider
app.DeltaSlider = uislider(app.UIFigure);
app.DeltaSlider.Limits = [0 1];
app.DeltaSlider.Position = [190 265 150 3];
% Create Label
app.Label = uilabel(app.UIFigure);
app.Label.HorizontalAlignment = 'right';
app.Label.Position = [388 361 95 22];
app.Label.Text = 'Мигр. травоядн.';
% Create Slider
app.Slider = uislider(app.UIFigure);
app.Slider.Limits = [0 1];
app.Slider.Position = [504 370 150 3];
% Create Label_2
app.Label_2 = uilabel(app.UIFigure);
app.Label_2.HorizontalAlignment = 'right';
app.Label_2.Position = [389 308 95 22];
app.Label_2.Text = 'Миграция хищн.';
% Create Slider_2
app.Slider_2 = uislider(app.UIFigure);
app.Slider_2.Limits = [0 1];
app.Slider_2.Position = [505 317 150 3];
% Create X0SliderLabel
app.X0SliderLabel = uilabel(app.UIFigure);
app.X0SliderLabel.HorizontalAlignment = 'right';
app.X0SliderLabel.Position = [353 256 25 22];
app.X0SliderLabel.Text = 'X0';
% Create X0Slider
app.X0Slider = uislider(app.UIFigure);
app.X0Slider.Position = [399 265 150 3];
% Create Y0SliderLabel
app.Y0SliderLabel = uilabel(app.UIFigure);
app.Y0SliderLabel.HorizontalAlignment = 'right';
app.Y0SliderLabel.Position = [582 256 25 22];
app.Y0SliderLabel.Text = 'Y0';
% Create Y0Slider
app.Y0Slider = uislider(app.UIFigure);
app.Y0Slider.Position = [628 265 150 3];
% Create UIAxes
app.UIAxes = uiaxes(app.UIFigure);
title(app.UIAxes, 'X и Y от t')
xlabel(app.UIAxes, 'X')
ylabel(app.UIAxes, 'Y')
app.UIAxes.PlotBoxAspectRatio = [1.93251533742331 1 1];
app.UIAxes.Position = [78 463 309 208];
% Create UIAxes2
app.UIAxes2 = uiaxes(app.UIFigure);
title(app.UIAxes2, 'X от Y')
xlabel(app.UIAxes2, 'X')
ylabel(app.UIAxes2, 'Y')
app.UIAxes2.Position = [469 407 305 251];
% Show the figure after all components are created
app.UIFigure.Visible = 'on';
end
end
% App creation and deletion
methods (Access = public)
% Construct app
function app = Laba_1
% Create UIFigure and components
createComponents(app)
% Register the app with App Designer
registerApp(app, app.UIFigure)
if nargout == 0
clear app
end
end
% Code that executes before app deletion
function delete(app)
% Delete UIFigure when app is deleted
delete(app.UIFigure)
end
end
end
Результат работы программы:
Рисунок 3 – Модель Лотки-Вольтерры при
Рисунок 4 – Модель Лотки-Вольтерры при
Рисунок 5 – Экспоненциальное вымирание хищников (при отсутствии жертв)
Рисунок 6 – Экспоненциальный рост жертв (при отсутствии хищников)
Рисунок 7 – Модель Лотки-Вольтерры при
Рисунок 8 – Модель Лотки-Вольтерры при
Рисунок 9 – Модель Лотки-Вольтерры при
Выводы
Система Лотки-Вольтерры является первоначальной и простейшей системой (усложненные системы будут рассмотрены ниже) для описания модели «хищник-жертва», то есть популяции хищников и популяции жертв, взаимодействующих в какой-то среде: жертвы едят растительность, хищники — жертв.
Из системы сразу следует, что если жертв нет (x = 0), то хищники будут вымирать экспоненциально с неким начальным коэффициентом (γ согласно уравнению). Что и было проиллюстрировано на рисунке 5.
Схожую ситуацию получаем при полном отсутствии хищников (y = 0):
Рост жертв получается экспоненциальным с некой заранее заданной константой (α), как на рисунке 6.
В ходе работы также наблюдалось такое значение размеров популяции животных, когда обе популяции остаются почти неизменными и сбалансированными, рисунок 4 (иногда в литературе можно встретить описание такого состояния, как «особой» точки). Если же начальное условие не попадает в особую точку, фазовые кривые будут идти вокруг нее, образуя бесконечное циклическое колебание. То есть количество особей одного вида будет расти, другого – падать, затем наоборот, как на рисунке 3.