Скачиваний:
22
Добавлен:
08.04.2022
Размер:
838.62 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра БТС

отчет

по лабораторной работе №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 – Графики отношения численности популяции хищник/жертва относительно времени и друг друга

Учет миграции:

, где

  1. Постоянная миграция

  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.

Соседние файлы в папке Лаба 1