Сгенерируйте уравнения Simscape от символьных выражений

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

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

Преобразуйте алгебраические и дифференциальные уравнения

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

syms a y(t)
Dy = diff(y);
s = dsolve(diff(y, 2) == -a^2*y, y(0) == 1, Dy(pi/a) == 0);
s = simplify(s)

Решение:

s =
cos(a*t)

Затем используйте simscapeEquation функционируйте, чтобы переписать решение на языке Simscape:

simscapeEquation(s)

simscapeEquation генерирует следующий код:

ans =
    's == cos(a*time);'

Переменная time заменяет все экземпляры переменной t за исключением производных относительно t. Чтобы использовать сгенерированное уравнение, скопируйте уравнение и вставьте его к разделу уравнения файла компонента Simscape. Не копируйте автоматически сгенерированную переменную ans и знак "равно", который следует за ним.

simscapeEquation преобразует любую производную относительно переменной t к обозначению Simscape, X.der, где X зависящая от времени переменная. Например, преобразуйте следующее дифференциальное уравнение в уравнение Simscape. Кроме того, здесь вы явным образом задаете левые и правые стороны уравнения при помощи синтаксиса simscapeEquation(LHS, RHS):

syms a x(t)
simscapeEquation(diff(x), -a^2*x)
ans =
    'x.der == -a^2*x;'

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

syms v u x
assume(x, 'real')
f = exp(-x^2*abs(v))*sin(v)/v;
s = fourier(f, v, u)
s =
piecewise(x ~= 0, atan((u + 1)/x^2) - atan((u - 1)/x^2))

От этого символьного кусочного уравнения, simscapeEquation генерирует допустимый код для раздела уравнения файла компонента Simscape:

simscapeEquation(s)
ans =
    'if (x ~= 0.0)
         s == -atan(1.0/x^2*(u-1.0))+atan(1.0/x^2*(u+1.0));
       else
         s == NaN;
       end'

Очистите предположение, что x действителен путем воссоздания его с помощью syms:

syms x

Ограничения

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