Раздел уравнения файла Simscape™ выполняется в течение симуляции. Цель раздела уравнения состоит в том, чтобы установить математические отношения среди переменных компонента, параметров, входных параметров, выходных параметров, время и производные времени каждой из этих сущностей.
Уравнение языка 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
недопустимо, потому что размеры выражений на лево-и правой стороне отличаются.
Раздел уравнения оценен в непрерывное время. Некоторые значения, которые доступны в разделе уравнения, являются самостоятельно кусочно-непрерывными, то есть, они изменяются постоянно вовремя. Эти значения:
переменные
входные параметры
выходные параметры
время
Piecewise continuous указывает, что значения непрерывны по компактным временным интервалам, но могут изменить значение в определенных экземплярах. Следующие значения являются непрерывными, но не изменяющимися во времени:
параметры
константы
Изменяющиеся во времени исчисляемые значения, например, целое число или логический, никогда не непрерывны.
Непрерывность распространена как тип данных. Это распространено через непрерывные функции (см. Поддерживаемые Функции).
На языке Simscape вы объявляете участников (таких как параметры, переменные, входные параметры и выходные параметры) как значение с модулем, и уравнения автоматически обрабатывают все модульные преобразования.
Однако эмпирические формулы часто используют экспоненты нецелого числа, где основа или безразмерна или в известных модулях. При работе с этими типами формул преобразуйте основу в безразмерное значение с помощью value
, функционируют и затем повторно применяют модули в случае необходимости.
Например, следующая формула дает перепад давления, в Pa, с точки зрения скорости потока жидкости, в m^3/s:
p == k * q^1.023
где p является давлением, q является скоростью потока жидкости, и k является некоторой безразмерной константой. Чтобы написать эту формулу в языке Simscape, используйте:
p == { k * value(q, 'm^3/s')^1.023, 'Pa' }
Этот подход работает независимо от фактических модулей p или q, пока они соразмерны с давлением и объемным расходом, соответственно. Например, фактическая скорость потока жидкости может быть в галлонах в минуту, уравнение будет все еще работать и обрабатывать модульное преобразование автоматически.