Параметры a и b передаточной функции динамического звена, коэффициент усиления K и величина внешнего воздействия G могут быть как стационарными, постоянными и не зависящими от времени протекающих процессов, так и нестационарными, изменяющимися в процессе моделирования.
Стационарные коэффициенты звеньев на структурной схеме задаются числами, а нестационарные - функциями, которые конструируются или программируются. Кроме того, у нелинейных звеньев имеются нелинейные функции НЭ, которые также конструируются. Имеется несколько способов задания нестационарных и нелинейных функций:
1. Блочная сборка - при помощи соединения простейших блоков (алгебраические, логические) на структурной схеме.
2. Условная запись - программирование с применением оператора "if" для задания значения функции на конкретных интервалах.
3. Логическая запись - алгебраическая запись формулы в одну строку с использованием логических операций.
Необходимо отметить, что в зависимости от типа элемента входными величинами являются:
1. Для внешнего воздействия - время моделирования t.
2. Для усилительного звена - время моделирования t и входной сигнал звена U.
3. Для нелинейного звена - входной сигнал звена U.
В большинстве случаев нестационарная или нелинейная функция разбивается на участки, каждый из которых имеет свою функцию от координаты начала участка до его окончания.
Например, функция, имеющая 2 участка, аналитически записывается следующим образом:
F(x)=
| v1(x), x>=x0 U x<x1
| v2(x), x>=x1
Под v1 и v2 понимаются подфункции на первом участке от x0 до x1 и втором участке от x1 до бесконечности, соответственно.
Интервалы выбираются так, чтобы у функции не было разрывов и не было пересечений участков.
Неправильная запись:
F(x)=
| v1(x), x
>x0 U x
<x1
| v2(x), x
>x1
В этой записи значение функции в точке x=x0 и x=x1 не определено.
Неправильная запись:
F(x)=
| v1(x), x>=x0 U x
<=x1
| v2(x), x
>=x1
В этой записи значение функции в точке x=x1 описывается двумя функциями v1 и v2, что недопустимо.
В общем случае участок с наклоном представляется в следующем виде.
Например, функция F(t) графически представлена на рисунке.
Функция имеет 3 участка, которые описываются следующим образом.
Участок 1 начинается в точке (0;7) и продолжается до точки (3;7).
Соответственно, v1(t) = 7, t0 = 0, t1 = 3.
Участок 2 начинается в точке (3;7) и продолжается до точки (5;12).
Функция v2(t) представляет собой линию с уравнением y(x)=k(x-x0)+y0, где k - коэффициент наклона, x0 - начальная координата по оси x, y0 - начальная координата по оси y. В рассматриваемом случае они совпадают с началом участка, таким образом, x0=3, y0=7.
Коэффициент наклона k рассчитывается по формуле k = (yK-y0)/(xK-x0), где yK=12 - конечное значение по оси y, xK=5 - конечное значение по оси x.
Таким образом, коэффициент k равен (12-7)/(5-3)=5/2
Соответственно, v2(t)=(t-3)*5/2 + 7, t1 = 3, t2 = 5.
Важно: При программировании возможны ошибки в расчетах, когда записывается целочисленная дробь, которая умножается на переменную.
Например, 5/2*t будет соответствовать 2*t, а не 2.5*t, т.к. сначала будет получен целочисленный результат деления целых чисел 5/2=2.
Для того, чтобы исключить возможные ошибки, переменную рекомендуется записывать до дроби. Это позволит привести сначала целые числа к числам с плавающей запятой, а затем выполнить операцию деления.
Поэтому следует указывать t*5/2 или 5*t/2 или 5.0/2*t.
Участок 3 начинается в точке (5;7) и продолжается до бесконечности (oo;7).
Соответственно, v3(t) = 7, t2 = 5, t3 = oo.
Математически функция F(t) будет иметь вид:
F(t) =
| 7, t>=0 U t<3
| (t-3)*5/2+7, t>=3 U t<5
| 7, t>=5
Так как моделирование в большинстве случаев проводится в положительном времени (от 0 до бесконечности), то участок t>=0 можно опустить. Тогда функция F(t) запишется следующим образом:
F(t) =
| 7, t<3
| (t-3)*5/2+7, t>=3 U t<5
| 7, t>=5
Подходов к реализации функции в программных продуктах может быть несколько, однако имеется универсальный способ, позволяющий записать выражение в одну строку.
В этом случае выражение представляет собой сумму произведений значений функций на интервалах на условный диапазон соответствующего интервала.
В общем виде выражение с использованием логических операторов запишется следующим образом:
v1(t)*(t<t1) + v2(t)*(t>=t1)*(t<t2) + v3(t)*(t>=t2)
Подставив значения функций на интервалах, а также граничные значения интервалов, выражение примет вид:
7*(t<3) + ((t-3)*5/2+7)*(t>=3)*(t<5) + 7*(t>=5)