generate:: Simscape

Сгенерируйте уравнение Simscape

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

generate::Simscape(e, <NoWarning>)

Описание

generate::Simscape(e) генерирует код Simscape™ для выражения MuPAD® e.

Программное обеспечение Simscape расширяет линейку продуктов Simulink® с инструментами для моделирования и симуляции многодоменных физических систем, таких как те с механическим устройством, гидравлическими, пневматическими, тепловыми, и электрическими компонентами. В отличие от других блоков Simulink, которые представляют математические операции или работают с сигналами, блоки Simscape представляют физические компоненты или отношения непосредственно. С блоками Simscape вы создаете модель системы так же, как вы собрали бы физическую систему. Для получения дополнительной информации о программном обеспечении Simscape, смотрите Simscape.

Можно расширить среду моделирования Simscape путем создания собственных компонентов. Когда вы зададите компонент, используйте раздел уравнения файла компонента, чтобы установить математические отношения среди переменных компонента, параметров, входных параметров, выходных параметров, время и производные времени каждой из этих сущностей. Программное обеспечение MuPAD и Simscape позволило вам выполнить символьные вычисления и использовать результаты этих вычислений в разделе уравнения. Функция generate::Simscape переводит результаты символьных вычислений к уравнениям языка Simscape.

generate::Simscape возвращает отформатированную строку Simscape, представляющую выражение, уравнение, список выражений или уравнений или матрицы.

generate::Simscape преобразовывает идентификатор t в переменную time в получившемся коде Simscape. Однако имя t вызова функции не изменяется во время преобразования. Смотрите Пример 1 и Пример 2.

generate::Simscape преобразовывает любую производную относительно переменной t к обозначению Simscape x.der, где x является зависящей от времени переменной. Смотрите Пример 3.

generate::Simscape принимает, что типом конвертированных данных является double. Смотрите Пример 4.

При генерации кода Simscape для матрицы генератор производит плотную матрицу. Смотрите Пример 5.

Используйте функцию generate::optimize, чтобы оптимизировать код MuPAD прежде, чем преобразовать его в синтаксис Simscape. Смотрите Пример 6.

generate::Simscape преобразовывает кусочные выражения в код Simscape при помощи операторов if. Смотрите Пример 7.

Раздел уравнения файла компонента Simscape поддерживает ограниченное количество функций. Для получения дополнительной информации и список поддерживаемых функций, смотрите Simscape equations. Если символьное уравнение содержит функции, которые не доступны в разделе уравнения файла компонента Simscape, generate::Simscape не может правильно преобразовать эти уравнения в уравнения Simscape. Такие выражения не инициировали ошибку. Следующие типы выражений подвержены недопустимому преобразованию:

  • Выражения с бесконечностями

  • Выражения, которые содержат структуры программирования, такие как циклы, coditional операторы (за исключением оператора if), и вызовы функции map

  • Выражения, которые содержат интервалы, наборы и списки

Чтобы отобразить сгенерированный код Simscape по экрану, используйте функцию print. Чтобы удалить кавычки и расширить специальные символы как разрывы строки и вкладки, используйте параметр печати Unquoted. Если строка сгенерированного кода более длинна, чем установка TEXTWIDTH, print функционирует пропуски что строка в несколько более коротких строк. Вставленный символ продолжения строки (\) не допустим в Simscape. Чтобы постараться не вставлять символы продолжения строки, увеличьте установку TEXTWIDTH или используйте функцию fprint, чтобы записать сгенерированный код в файл.

Чтобы записать сгенерированный код Simscape в файл, используйте функцию fprint с опцией Unquoted. Смотрите Пример 8.

Опция NoWarning позволяет вам отключить предупреждения. Смотрите Пример 2.

Примеры

Пример 1

Функция generate::Simscape заменяет все экземпляры идентификатора MuPAD t с переменной time. Например, преобразуйте следующее уравнение в уравнение Simscape:

e := A*sin(w*t) + B*cos(w*t) = 0:
print(Unquoted, generate::Simscape(e))
  B*cos(time*w)+A*sin(time*w) == 0.0;

Пример 2

Функция generate::Simscape не изменяет название функции t в вызовах функции:

print(Unquoted, generate::Simscape([t(), t(0), t(x)]))
Warning: Function 't' not verified to be a valid Simscape function.
  t();
  t(0.0);
  t(x);

Этот пример производит несколько идентичных предупреждений. Если вы начали использовать generate::Simscape недавно, предупреждения могут помочь вам идентифицировать потенциальные проблемы в конвертированном коде. Если вы хотите отключить предупреждения, используйте опцию NoWarning:

print(Unquoted, generate::Simscape([t(), t(0), t(x)], NoWarning))
  t();
  t(0.0);
  t(x);

Пример 3

При генерации кода Simscape функция generate::Simscape преобразовывает производные относительно переменной t к обозначению Simscape x.der. Здесь x является зависящей от времени переменной. Например, сгенерируйте код Simscape для уравнения e, который имеет две зависящих от времени переменные:

e := x'(t) + diff(y(t), t) + 2*x + 5 = 0:
print(Unquoted, generate::Simscape(e))
  x*2.0+x.der+y.der+5.0 == 0.0;

Пример 4

По умолчанию Simscape хранит все числовые значения как значения с плавающей точкой с двойной точностью. В соответствии с этим типом данных по умолчанию, generate::Simscape преобразовывает элементы выражений, уравнений и матриц к двойному формату:

print(Unquoted, generate::Simscape(x^2 + y/3 + 1/6))
  y/3.0+x^2+1.0/6.0;

Пример 5

generate::Simscape может сгенерировать код Simscape для матрицы MuPAD. В отличие от generate::MATLAB (который производит разреженные матрицы), генератор кода Simscape производит плотные матрицы:

A:= matrix([[1, 0, 0],[0, 0, 1]]):
print(Unquoted, generate::Simscape(A))
  [
  1.0 0.0 0.0
  0.0 0.0 1.0
  ];

Пример 6

Функция generate::Simscape не оптимизирует ваш код:

print(Unquoted,
      generate::Simscape([x = a + b, y = (a + b)^2])):
  x == a+b;
  y == (a+b)^2;

Можно использовать функцию generate::optimize прежде, чем преобразовать код MuPAD в синтаксис Simscape. Например, эта функция может сократить количество операций путем нахождения общих подвыражений:

print(Unquoted,
      generate::Simscape(
          generate::optimize([x = a + b, y = (a + b)^2])
      )):
  x == a+b;
  y == x^2;

Пример 7

Функция generate::Simscape также принимает кусочные выражения. Функция использует операторы if при генерации кода Simscape для кусочных выражений. Например, преобразование Фурье следующего выражения является кусочной функцией:

FT := fourier(exp(-abs(x)*abs(t))*sin(t)/t, t, s)

generate::Simscape преобразовывает этот результат в допустимое выражение Simscape:

print(Unquoted, generate::Simscape(FT))
  if (x ~= 0.0)
    -atan((s-1.0)/abs(x))+atan((s+1.0)/abs(x));
  else
    NaN;
  end

Пример 8

Чтобы создать текстовый файл с отформатированной строкой Simscape, представляющей символьное выражение, используйте команду fprint:

e := x'(t) + 2*x + 5 = 0:
fprint(Unquoted, Text, "eqn.txt", generate::Simscape(e))

Если файл, eqn.txt уже существует, fprint, заменяет существующий код Simscape на конвертированное символьное выражение. Можно открыть и отредактировать получившийся текстовый файл.

Параметры

e

Выражение, уравнение, список уравнений или матрица

Опции

NoWarning

Отключить предупреждения.

Возвращаемые значения

generate::Simscape возвращает string, содержащий код Simscape. В случае недопустимого преобразования возвращенное значение является произвольной строкой.

Смотрите также

Функции MuPAD