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.
Функция 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;
Функция 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);
При генерации кода 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;
По умолчанию Simscape хранит все числовые значения как значения с плавающей точкой с двойной точностью. В соответствии с этим типом данных по умолчанию, generate::Simscape
преобразовывает элементы выражений, уравнений и матриц к двойному формату:
print(Unquoted, generate::Simscape(x^2 + y/3 + 1/6))
y/3.0+x^2+1.0/6.0;
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 ];
Функция 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;
Функция 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
Чтобы создать текстовый файл с отформатированной строкой Simscape, представляющей символьное выражение, используйте команду fprint
:
e := x'(t) + 2*x + 5 = 0: fprint(Unquoted, Text, "eqn.txt", generate::Simscape(e))
Если файл, eqn.txt
уже существует, fprint
, заменяет существующий код Simscape на конвертированное символьное выражение. Можно открыть и отредактировать получившийся текстовый файл.
|
Выражение, уравнение, список уравнений или матрица |
|
Отключить предупреждения. |
generate::Simscape
возвращает string
, содержащий код Simscape. В случае недопустимого преобразования возвращенное значение является произвольной строкой.