exponenta event banner

Определение уравнений компонентов

Назначение раздела уравнений

Целью раздела уравнений является установление математических отношений между переменными компонента, параметрами, входами, выходами, производными времени и времени каждого из этих объектов. Раздел уравнений файла 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, если они соизмеримы с давлением и объемным расходом соответственно. Например, фактический расход может быть в галлонах в минуту, уравнение будет работать и обрабатывать преобразование единиц автоматически.

Связанные примеры

Подробнее