Денис Владимирович Соломатин

Математические модели в естественнонаучном образовании. Том I


Скачать книгу

Функция bifur: строит однопараметрическую диаграмму бифуркаций

      % Вход: fun = некоторая функция @(x,para)

      %        x0 = стартовое значение для x

      %        a0 = начальное значение параметра a

      %        a1 = конечное значение параметра a

      %         N = количество интервалов для параметра 'a' на отрезке [a0;a1]

      %      preL = количество предварительно пропускаемых итераций для

      %             преодоления переходного процесса перед стабилизацией

      %         L = количество итераций для каждой начальной пары

      %               от (x0,параметр a)

      %        p_siz = размер маркера, по умолчанию 1

      % Выход: mat = бифукационная матрица размера N на L

      %               которая хранит последовательность длины L

      %               для каждой пары (x0, параметр a)

      % –

      % установки по умолчанию

      if ~exist('p_siz','var')

          p_siz = 1;

      end

      % инициализация

      mat = zeros(N,L);

      a = linspace(a0,a1,N);

      % основной цикл

      format long

      for i = 1:N

          ca = a(i); % выбрать одно значение параметра в каждый момент времени

          for j = 1:L % сгенерировать последовательность длиной L

              if j == 1

                  pre = x0; % инициализируем стартовое значение

                  for k = 1:preL % пропускаем значения переходного процесса

                     nxt = fun(pre,ca);

                     pre = nxt;

                  end

              end

              nxt = fun(pre,ca); % вычисляем следующее значение последовательности

              mat(i,j) = nxt; % сохраняем в результирующей матрице mat

              pre = nxt; % последнее значение будет начальным для следующей итерации

          end

      end

      % построение графика

      dcolor = [0,0,1]; % настройка цвета маркера: синий

      [r,c] = meshgrid(1:L,a); % наполяем сетку данных координат

      surf(r,c,mat,'Marker','*','MarkerSize',p_siz,'FaceColor','None','MarkerEdgeColor', dcolor,'EdgeColor','None')

      view([90,0,0]) % фиксируем направление камеры

      ylim([a0,a1]) % размещаем данные на диаграмме

      end

      2. Для популяции со временем регенерации значительно меньшей единицы времени может быть неуместно думать о пропускной способности как о константе. Исследуйте, что произойдет, если пропускная способность изменяется синусоидально. Для начала попробуйте понять следующие команды MATLAB:

      t=[0:50]

      K=5+sin((2*pi/12)*t)

      p=.1; pops=p

      for i=1:50

          p=p+.2*p*(1-p/K(i));

          pops=[pops p];

      end

      plot(t,K,t,pops)

      Рекомендации

       Объясните, почему синусоидально изменяющаяся пропускная способность может иметь физический или социально-экономический смысл при некоторых обстоятельствах.

       Исследуйте поведение модели для различных вариантов

 и
. Колеблется ли
 вместе с
? Обратите особое внимание на то, когда популяция достигает пика и каково среднее значение
 в долгосрочной перспективе. Соответствуют ли результаты машинных экспериментов вашей интуиции?

       Что происходит, если изменяется частота колебаний пропускной способности? Попробуйте заменить