Целью раздела уравнений является установление математических отношений между переменными компонента, параметрами, входами, выходами, производными времени и времени каждого из этих объектов. Раздел уравнений файла Simscape™ выполняется во время моделирования.
Примечание
Можно также указать уравнения, которые выполняются только во время инициализации модели, используя (Initial=true) атрибут. Дополнительные сведения см. в разделе Начальные уравнения.
Уравнение языка Simscape состоит из двух выражений, связанных с оператором = =. В отличие от обычного оператора назначения (=), оператор = = указывает непрерывное математическое равенство между двумя выражениями (дополнительные сведения см. в разделе Определение математического равенства). Выражения уравнений могут быть построены из любого из идентификаторов, определенных в объявлении модели. Можно также получить доступ к глобальному времени моделирования из раздела уравнений с помощью time функция.
Список функций MATLAB ®, которые можно использовать в разделе уравнений, см. в разделе Поддерживаемые функции.
Язык Simscape семантически определяет, что все выражения уравнений, возвращаемые разделом уравнений файла Simscape, определяют непрерывное математическое равенство между двумя выражениями. Рассмотрим простой пример:
equations Expression1 == Expression2; end
Здесь мы провозгласили равенство между Expression1 и Expression2. Левое и правое выражения являются любыми допустимыми выражениями MATLAB (ограничения на использование реляционных операторов см. в следующем разделе: ==, <, >, <=, >=, ~=, &&, ||). Выражения уравнений могут быть построены из любого из идентификаторов, определенных в объявлении модели.
Уравнение определяется оператором = =. Это означает, что уравнение представляет не назначение, а скорее симметричное математическое соотношение между левым и правым операндами. Поскольку = = симметричен, левый операнд не ограничивается только переменной. Например :
component MyComponent
[...]
variables
a = 1;
b = 1;
c = 1;
end
equations
a + b == c;
end
end
Следующий пример математически эквивалентен предыдущему:
component MyComponent
[...]
variables
a = 1;
b = 1;
c = 1;
end
equations
0 == c - a - b;
end
end
Примечание
Выражения уравнений должны заканчиваться точкой с запятой или новой строкой. В отличие от MATLAB, отсутствие точки с запятой не имеет никакого значения. В любом случае язык Simscape не отображает результат, так как вычисляет уравнение.
В предыдущем разделе мы обсуждали, как == используется для объявления математических уравнений. Однако в MATLAB == вырабатывает выражение, как и любой другой оператор. Например:
(a == b) * c;
где a, b, и c представляет скалярные двойные значения, является законным выражением MATLAB. Это будет означать, возьмите logical значение, сгенерированное при тестировании aэквивалентность b, принудительно введите это значение в double и умножить на c. Если a является таким же, как b, то это выражение вернется c. В противном случае возвращается значение 0.
С другой стороны, в MATLAB мы можем использовать == дважды для построения выражения:
a == b == c;
Это выражение неоднозначно, но MATLAB делает == и другие реляционные операторы оставили ассоциативными, поэтому это выражение рассматривается как:
(a == b) == c;
Тонкая разница между (a == b) == c и a == (b == c) может быть значимым в MATLAB, но даже более значимым в уравнении. Потому что использование == является значимым в языке Simscape, и во избежание неоднозначности следующий синтаксис:
component MyComponent
[...]
equations
a == b == c;
end
end
недопустим в языке Simscape. Необходимо явно связать вхождения верхнего уровня реляционных операторов. Также
component MyComponent
[...]
equations
(a == b) == c;
end
end
или
component MyComponent
[...]
equations
a == (b == c);
end
end
являются законными. В любом случае количество в скобках приравнивается к количеству на другой стороне уравнения.
За исключением использования верхнего уровня == оператор, == и другие реляционные операторы остаются ассоциативными. Например:
component MyComponent
[...]
parameters
a = 1;
b = 1;
c = false;
end
variables
d = 1;
end
equations
(a == b == c) == d;
end
end
является законным и интерпретируется как:
component MyComponent
[...]
parameters
a = 1;
b = 1;
c = false;
end
variables
d = 1;
end
equations
((a == b) == c) == d;
end
end
Выражения с обеих сторон == оператор не обязательно должен быть скалярным выражением. Они должны быть одного размера или скалярными. Например:
equations [...] <3x3 Expression> == <3x3 Expression>; [...] end
является легальным и вводит 9 скалярных уравнений. Выражение уравнения:
equations [...] <1x1 Expression> == <3x3 Expression>; [...] end
также является законным. Здесь левая часть уравнения расширяется посредством скалярного расширения в то же выражение, реплицированное в матрицу 3x3. Это выражение уравнения также вводит 9 скалярных уравнений.
Однако выражение уравнения:
equations [...] <2x3 Expression> == <3x2 Expression>; [...] end
недопустим, поскольку размеры выражений слева и справа различны.
Секция уравнения оценивается в непрерывном времени. Некоторые из значений, доступных в разделе уравнений, сами являются кусочно непрерывными, то есть изменяются непрерывно во времени. Эти значения:
переменные
исходные данные
продукция
время
Кусочно-непрерывное указывает, что значения являются непрерывными в течение компактных временных интервалов, но могут изменять значение в определенных случаях. Следующие значения являются непрерывными, но не изменяющимися во времени:
параметры
константы
Изменяющиеся во времени счетные значения, например целочисленные или логические, никогда не являются непрерывными.
Непрерывность распространяется как тип данных. Он распространяется через непрерывные функции (см. Поддерживаемые функции).
В языке Simscape элементы (такие как параметры, переменные, входы и выходы) объявляются как значения с единицей измерения, и уравнения автоматически обрабатывают все преобразования единиц измерения.
Однако эмпирические формулы часто используют неинтегрированные экспоненты, где основание является либо безединичным, либо в известных единицах. При работе с формулами этих типов преобразуйте базу в безразмерное значение с помощью value и затем при необходимости повторно примените блоки.
Например, следующая формула дает перепад давления в Па по расходу в м ^ 3/с:
p == k * q^1.023
где p - давление, q - расход, а k - некоторая константа без единиц. Чтобы записать эту формулу на языке Simscape, используйте:
p == { k * value(q, 'm^3/s')^1.023, 'Pa' }
Этот подход работает независимо от фактических единиц p или q, если они соизмеримы с давлением и объемным расходом соответственно. Например, фактический расход может быть в галлонах в минуту, уравнение будет работать и обрабатывать преобразование единиц автоматически.