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

Цель раздела уравнения

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

недопустимо, поскольку размеры выражений в левой и правой частях различаются.

Непрерывность уравнения

Раздел уравнения оценивается за непрерывное время. Некоторые значения, которые доступны в разделе уравнения, сами по себе кусочно-непрерывны, то есть изменяются постоянно во времени. Эти значения:

  • переменные

  • входы

  • выходы

  • время

Piecewise continuous указывает, что значения непрерывны в течение компактных временных интервалов, но могут изменяться в определенных образцах. Следующие значения являются непрерывными, но не изменяющимися во времени:

  • параметры

  • константы

Изменяющиеся во времени счетные значения, например, целое или логическое, никогда не являются непрерывными.

Непрерывность распространяется как тип данных. Он распространяется через непрерывные функции (см. «Поддерживаемые функции»).

Работа с физическими единицами измерения в уравнениях

В языке Simscape вы объявляете представителей (такие как параметры, переменные, входы и выходы) как значение с модулем, и уравнения автоматически обрабатывают все преобразования модуля.

Однако эмпирические формулы часто используют нецелочисленные экспоненты, где основа либо безединично, либо в известных модулях. При работе с этими типами формул преобразуйте основу в бесчисленное значение с помощью value функцию, а затем при необходимости повторно применить модули.

Например, следующая формула дает перепад давления, в Pa, с точки зрения скорости потока жидкости, в м ^ 3/с:

p == k * q^1.023 

где p - давление, q - скорость потока жидкости и k - некоторая бесчисленная константа. Чтобы написать эту формулу на языке Simscape, используйте:

p == { k * value(q, 'm^3/s')^1.023, 'Pa' } 

Этот подход работает независимо от фактических модулей p или q, пока они соизмеримы с давлением и объемными скоростями потока жидкости, соответственно. Для примера фактическая скорость потока жидкости может быть в галлонах в минуту, уравнение все еще будет работать и обрабатывать преобразование модуля автоматически.

Похожие примеры

Подробнее о