Использование символьных параметров и контекста в xcos
Использование символьных параметров и контекста в xcos на примере визуального моделирования системы Хищник-Жертва
Автор: kitkat
Использование символьных параметров и контекста в xcos на примере визуального моделирования системы Хищник-Жертва
Приступая к моделированию некоторой динамической системы, часто бывает нужно не раз использовать один и тот же параметр в разных уравнениях или задавать некоторые коэффициенты как функции некоторой переменной величины. Для того, чтобы не создавать одинаковые функциональные блоки, обременяющих схему и для реализации сложных зависимостей, в Xcos предусмотрены символьные параметры и контекст.
Контекст – это код на языке Scilab, который может содержать как простое декларирование переменных, так и создание полноценных самостоятельных Scilab –функций.
Символьные параметры – это непосредственно сами переменные, заданные в контексте, к которым можно обратиться по имени для использования в функциональных блоках при создании блок-схемы.
Рассмотрим использование контекста и символьных параметров на примере создания блок-схемы системы Хищник-Жертва. Данная биологическая система описывает взаимодействие двух видов, один из которых хищники, а второй – жертвы. Изменение популяций во времени описывается системой двух дифференциальных уравнения первой степени вида:
где - популяция жертв. - популяция хищников, - прирост популяций в момент времени , - темп роста жертв в отсутствии хищников, - скорость, с которой хищники поглощают добычу, - смертность хищников при отсутствии добычи, - скорость, с которой популяция хищников увеличивается, потребляя добычу.
Посмотреть, как можно манипулировать численностью популяций путём ввода управляющего воздействия в данную систему, можно в статье статье.
Создание блок схемы, описывающей взаимодействие двух популяций начнём с задания положительных коэффициентов через контекст.
Для задания контекста кликните правой кнопкой мыши в любом месте рабочей области и выпадающем меню выберите пункт «Установить контекст» (рис. 44 а).
Создадим заготовку для каждого из уравнений (1), представляющих собой интеграл от суммы, при этом, укажем начальную численность хищников и жертв в 2 и 6 особей соответственно, как показано на рис. 45. Рисунок 45. Начало сбора блок-схемы модели Хищник-Жертва Рисунок 45. Начало сбора блок-схемы модели Хищник-Жертва
Далее создадим первое слагаемое из первого уравнения, как усиленное в раз произведение результата интегрирования (см. рис. 46). Обратите внимание, что в блок GAINBLK в данном случае имеет значение символьного параметра . Рисунок 46. Использование символьного параметра в блоке усилителя Рисунок 46. Использование символьного параметра в блоке усилителя
Второе слагаемого первого уравнения представляет собой произведение переменных , образующихся на выходах блоков INTEGRAL_m, которое усиливается в раз и подаётся на вход блока BIGSOM_f со знаком «-», как показано на рис. 47. Рисунок 47. Блок-схема правой части 1-го диф. уравнения системы(1) Рисунок 47. Блок-схема правой части 1-го диф. уравнения системы(1)
По аналогии с пунктами 2-3 необходимо провести соединительные линии, обеспечивающие связи блоков для создания уравнения хищников , входящего в систему (1). Обратите внимание, что во втором уравнении фигурирует множитель с коэффициентом усиления . Данный множитель присутствует и в уравнении для жертв и формируется на выходе блока-произведения, поэтому дублирование данного произведения излишне, потребуется лишь распараллелить выход блока. В результате должна получиться блок-схема, показанная на рис. 48. Рисунок 48. Блок-схема 1-го и 2-го части диф. уравнений (1) Рисунок 48. Блок-схема 1-го и 2-го части диф. уравнений (1)
Далее подсоедините регулярные выходы интегральных блоков INTEGRAL_m ко входам TOWS_c, а управляющие входы блоков TOWS_c – параллельно соедините со входом блока CLOCK_C (см. рис. 49). Рисунок 49. Блок-схема системы Хищник-жертва Рисунок 49. Блок-схема системы Хищник-жертва Блок TOWS_c собирает в буфер данные моделирования для дальнейшего их использования в контексте. У данного блока нам интересны следующие внутренние параметры: Size of buffer - размер входного буфера, это общее количество значений входной переменной, записанных во время моделирования; Scilab variable name - имя переменной Scilab, по которому в последующем в контексте можно будет обратиться к значениям, записанным в конкретном буфере. Для буфера, принимающего на вход переменную задайте Scilab variable name=x_prey. Для буфера, принимающего на вход переменную задайте Scilab variable name=y_predator. Размер буфера в обоих случаях установите равным 1280.
Запустите моделирование на 10 сек. и убедитесь, что не возникает ошибок моделирования. Но и графики не появляются.
Для того, чтобы увидеть графическую и интерпретацию колебаний численности популяций, прибегнем к использованию в контексте заданных переменных x_prey и y_predator. Откройте окно добавления контекста и добавьте к уже имеющимся строкам следующие:
Обратите внимание, что численность популяций (2-е хищников и 6 жертв) в нулевой момент времени соответствует начальным условиям, заданным в параметрах блоков – интеграторов.
Анализируя график численности популяций, можно сделать следующие выводы:
численность хищников всегда отстаёт от популяции жертв;
когда популяция жертв высока, хищники начинают быстро размножаться из-за обилия пищи;
когда хищников становится слишком много, популяция жертв начинает стремительно сокращаться;
при недостаточной численности жертв, поголовье хищников начинает сокращаться из-за недостатка пищи;
когда популяция хищников мала, популяция жертв увеличивается из-за низкого уровня смертности.
Итак, на примере создания блок-схемы математической модели взаимодействия двух популяций, мы рассмотрели возможность задания переменных в контексте Xcos и их последующего использования в функциональных блоках. Кроме того, мы научились пользоваться блоками буферизации TOWS_c и познакомились порядком использования встроенных функций Scilab для построения и настройки отображения графиков.
Посмотреть, как можно манипулировать численностью популяций путём ввода управляющего воздействия в данную систему, можно в статье статье.