Сгенерируйте блоки MATLAB function от символьных выражений

Используя matlabFunctionBlock, можно сгенерировать MATLAB® Функциональный блок. Сгенерированный блок доступен для использования в Simulink® модели, имеет ли компьютер, запускающий симуляции, лицензию на Symbolic Math Toolbox™.

Сгенерируйте и отредактируйте блок

Предположим, вы хотите создать модель, включающую символьное выражение r = sqrt(x^2 + y^2). Прежде чем можно будет преобразовать символьное выражение в блок MATLAB function, создать пустую модель или открыть существующую:

new_system('my_system')
open_system('my_system')

Создайте символьное выражение и передайте его matlabFunctionBlock команда. Также задайте имя блока:

syms x y
r = sqrt(x^2 + y^2);
matlabFunctionBlock('my_system/my_block', r)

Если вы используете имя существующего блока, matlabFunctionBlock команда заменяет определение существующего блока с конвертированным символьным выражением.

Можно открыть и отредактировать сгенерированный блок. Чтобы открыть блок, дважды кликните его.

function r = my_block(x,y)
%#codegen

r = sqrt(x.^2+y.^2);

Совет

Некоторые символьные выражения не могут быть представлены с помощью функций MATLAB. matlabFunctionBlock не может преобразовать эти символьные выражения, но выдает предупреждение. Поскольку эти выражения могут привести к неопределенным вызовам функции, всегда проверять результаты преобразования и проверить результаты путем выполнения симуляции, содержащей получившийся блок.

Управляйте порядком Input port

matlabFunctionBlock генерирует входные переменные и соответствующие входные порты в алфавитном порядке от символьного выражения. Чтобы изменить порядок входных переменных, используйте vars опция:

syms x y
mu = sym('mu');
dydt = -x - mu*y*(x^2 - 1);
matlabFunctionBlock('my_system/vdp', dydt,'vars', [y mu x])

Назовите выходные порты

По умолчанию, matlabFunctionBlock генерирует имена выходных портов как слово out сопровождаемый номером выходного порта, например, out3. output опция позволяет вам использовать пользовательские имена выходных портов:

syms x y
mu = sym('mu');
dydt = -x - mu*y*(x^2 - 1);
matlabFunctionBlock('my_system/vdp', dydt,'outputs',{'name1'})