Назад к материалам

Использование символьных параметров и контекста в xcos

Использование символьных параметров и контекста в xcos на примере визуального моделирования системы Хищник-Жертва

Использование символьных параметров и контекста в xcos на примере визуального моделирования системы Хищник-Жертва

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

Контекст – это код на языке Scilab, который может содержать как простое декларирование переменных, так и создание полноценных самостоятельных Scilab –функций.

Символьные параметры – это непосредственно сами переменные, заданные в контексте, к которым можно обратиться по имени для использования в функциональных блоках при создании блок-схемы.

Рассмотрим использование контекста и символьных параметров на примере создания блок-схемы системы Хищник-Жертва. Данная биологическая система описывает взаимодействие двух видов, один из которых хищники, а второй – жертвы. Изменение популяций во времени описывается системой двух дифференциальных уравнения первой степени вида:

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

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

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

Для задания контекста кликните правой кнопкой мыши в любом месте рабочей области и выпадающем меню выберите пункт «Установить контекст» (рис. 44 а).

Рисунок 44a. Выпадающее меню для вызова окна контекста
Рисунок 44a. Выпадающее меню для вызова окна контекста

Рисунок 44a. Выпадающее меню для вызова окна контекста

Далее в открывшемся окне задайте значения переменных, как показано на рис. 44 б). После чего нажмите кнопку «ОК».

Рисунок 44б. задание переменных в окне контекста Xcos
Рисунок 44б. задание переменных в окне контекста Xcos

Рисунок 44б. задание переменных в окне контекста Xcos

После проделанных манипуляций, вы сможете использовать заданные символьные параметры непосредственно в самих блоках Xcos.

Перечислим блоки, которые будут использованы для создания блок-схемы:

  • Нам потребуются два блока INTEGRAL_m, так как в системе (1) два уравнения;
  • Два сумматора, так как и первое, и второе уравнения системы (1) состоят из двух слагаемых;
  • Для задания множителей нам понадобятся усилители в количестве 4-х штук;
  • Блоки CLOCK_c и END;
  • Один блок умножения
    Задание переменных в Xcos на примере системы 2-х ОДУ
    Задание переменных в Xcos на примере системы 2-х ОДУ
    с вкладки «Математические операции» для произведения фазовых переменных;
  • Два блока
    Задание переменных в Xcos на примере системы 2-х ОДУ
    Задание переменных в Xcos на примере системы 2-х ОДУ
    , располагающихся на палитре «Регистрирующие устройства», с помощью которых будет осуществляться вывод графиков.

Итак, приступим.

  1. Создадим заготовку для каждого из уравнений (1), представляющих собой интеграл от суммы, при этом, укажем начальную численность хищников и жертв в 2 и 6 особей соответственно, как показано на рис. 45.
    Рисунок 45. Начало сбора блок-схемы модели Хищник-Жертва
    Рисунок 45. Начало сбора блок-схемы модели Хищник-Жертва

    Рисунок 45. Начало сбора блок-схемы модели Хищник-Жертва
  2. Далее создадим первое слагаемое из первого уравнения, как усиленное в раз произведение результата интегрирования (см. рис. 46). Обратите внимание, что в блок GAINBLK в данном случае имеет значение символьного параметра .
    Рисунок 46. Использование символьного параметра в блоке усилителя
    Рисунок 46. Использование символьного параметра в блоке усилителя

    Рисунок 46. Использование символьного параметра в блоке усилителя
  3. Второе слагаемого первого уравнения представляет собой произведение переменных , образующихся на выходах блоков INTEGRAL_m, которое усиливается в раз и подаётся на вход блока BIGSOM_f со знаком «-», как показано на рис. 47.
    Рисунок 47. Блок-схема правой части 1-го диф. уравнения системы(1)
    Рисунок 47. Блок-схема правой части 1-го диф. уравнения системы(1)

    Рисунок 47. Блок-схема правой части 1-го диф. уравнения системы(1)
  4. По аналогии с пунктами 2-3 необходимо провести соединительные линии, обеспечивающие связи блоков для создания уравнения хищников , входящего в систему (1). Обратите внимание, что во втором уравнении фигурирует множитель с коэффициентом усиления . Данный множитель присутствует и в уравнении для жертв и формируется на выходе блока-произведения, поэтому дублирование данного произведения излишне, потребуется лишь распараллелить выход блока. В результате должна получиться блок-схема, показанная на рис. 48.
    Рисунок 48. Блок-схема 1-го и 2-го части диф. уравнений (1)
    Рисунок 48. Блок-схема 1-го и 2-го части диф. уравнений (1)

    Рисунок 48. Блок-схема 1-го и 2-го части диф. уравнений (1)
  5. Далее подсоедините регулярные выходы интегральных блоков INTEGRAL_m ко входам TOWS_c, а управляющие входы блоков TOWS_c – параллельно соедините со входом блока CLOCK_C (см. рис. 49).
    Рисунок 49. Блок-схема системы Хищник-жертва
    Рисунок 49. Блок-схема системы Хищник-жертва

    Рисунок 49. Блок-схема системы Хищник-жертва
    Блок TOWS_c собирает в буфер данные моделирования для дальнейшего их использования в контексте. У данного блока нам интересны следующие внутренние параметры: Size of buffer - размер входного буфера, это общее количество значений входной переменной, записанных во время моделирования; Scilab variable name - имя переменной Scilab, по которому в последующем в контексте можно будет обратиться к значениям, записанным в конкретном буфере.
    Для буфера, принимающего на вход переменную задайте Scilab variable name=x_prey. Для буфера, принимающего на вход переменную задайте Scilab variable name=y_predator. Размер буфера в обоих случаях установите равным 1280.
  6. Запустите моделирование на 10 сек. и убедитесь, что не возникает ошибок моделирования. Но и графики не появляются.
  7. Для того, чтобы увидеть графическую и интерпретацию колебаний численности популяций, прибегнем к использованию в контексте заданных переменных x_prey и y_predator.
    Откройте окно добавления контекста и добавьте к уже имеющимся строкам следующие:
plot(x_prey.time, x_prey.values, "b", "Linewidth", 2);
plot(y_predator.time, y_predator.values, "r", "Linewidth", 2);
legend("Жертвы","Хищники"); xgrid;
xtitle("Модель Хищник-Жертва", "t, время", "x, y");

Задание контекста в Xcos.

8. После запуска моделирования появится окно с одной системой координат с заголовком, подписанными осями и двумя графиками, как показано на рис. 50.

Рисунок 50. Моделирование системы Хищник-жертва
Рисунок 50. Моделирование системы Хищник-жертва

Рисунок 50. Моделирование системы Хищник-жертва

Обратите внимание, что численность популяций (2-е хищников и 6 жертв) в нулевой момент времени соответствует начальным условиям, заданным в параметрах блоков – интеграторов.

Анализируя график численности популяций, можно сделать следующие выводы:

  • численность хищников всегда отстаёт от популяции жертв;
  • когда популяция жертв высока, хищники начинают быстро размножаться из-за обилия пищи;
  • когда хищников становится слишком много, популяция жертв начинает стремительно сокращаться;
  • при недостаточной численности жертв, поголовье хищников начинает сокращаться из-за недостатка пищи;
  • когда популяция хищников мала, популяция жертв увеличивается из-за низкого уровня смертности.

Итак, на примере создания блок-схемы математической модели взаимодействия двух популяций, мы рассмотрели возможность задания переменных в контексте Xcos и их последующего использования в функциональных блоках. Кроме того, мы научились пользоваться блоками буферизации TOWS_c и познакомились порядком использования встроенных функций Scilab для построения и настройки отображения графиков.

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