МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра БТС
ОТЧЕТ по лабораторной работе №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 – численность хищников;
– вероятность того, что травоядные размножатся;
– вероятность того, что травоядное будет съедено;
– вероятность того, что хищник умрет от голода;
– вероятность того, что хищнику хватит еды на дальнейшее размножение.
Допущения:
•Количество пищи для травоядных не ограничено;
•Ни жертвы, ни хищники не эмигрируют из среды;
•Никакие другие животные не мигрируют в среду;
•Данная модель не учитывает вымирание животных по причине
старения и прочих внешних воздействий. 2
Рисунок 1 – Графики отношения численности популяции хищник/жертва относительно времени и друг друга
Учет миграции:
|
{ |
̇= ( − ) + ( ) |
, где |
|||
|
|
̇= (− + ) + ( ) |
|
|||
1. |
Постоянная миграция |
|
||||
|
( ) = ≥ 0 ( ) = ≥ 0, |
|
||||
2. |
Непостоянная миграция |
|
||||
|
( ) = |
|
( ) = |
|
|
|
|
|
|
, |
|
||
|
|
|
|
Рисунок 2 – Графики отношения численности популяции хищник/жертва относительно времени и друг друга c учетом миграции
3
Ход выполнения лабораторной работы
Программный код в 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)];
4
[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];
5
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')
6
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
7
Результат работы программы:
Рисунок 3 – Модель Лотки-Вольтерры при = 0,36; = 0,42; =
0,72; = 0,34;
Рисунок 4 – Модель Лотки-Вольтерры при = 0,36; = 0,41; =
0,71; = 0,32;
8
Рисунок 5 – Экспоненциальное вымирание хищников (при отсутствии жертв)
Рисунок 6 – Экспоненциальный рост жертв (при отсутствии хищников)
9
Рисунок 7 – Модель Лотки-Вольтерры при = 0,41; = 0,13; =
0,78; = 0,17;
Рисунок 8 – Модель Лотки-Вольтерры при = 0,45; = 1; = 0,81; =
0,14;
10