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

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

Можно расширить окружение моделирования Simscape, создав собственные компоненты. Когда вы задаете компонент, используйте раздел уравнения файла компонента, чтобы установить математические отношения между переменными, параметрами, входами, выходами, временем и производными по времени каждой из этих сущностей. Программное обеспечение Symbolic Math Toolbox™ и Simscape позволяет вам выполнить символьные расчеты и использовать результаты этих расчетов в разделе уравнения. The 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). Если символьное выражение содержит функции, которые не поддерживаются Simscape, то simscapeEquation не может представлять символическое выражение как уравнение Simscape и выдает предупреждение вместо этого. Всегда проверяйте результат преобразования. Выражения с бесконечностями склонны к недопустимому преобразованию.