Используя matlabFunctionBlock
, можно сгенерировать Функциональный блок MATLAB®. Сгенерированный блок доступен для использования в моделях Simulink®, имеет ли компьютер, запускающий симуляции, лицензию на Symbolic Math Toolbox™.
Если вы работаете в MuPAD® Notebook, смотрите, Создают блоки MATLAB function из Выражений MuPAD.
Предположим, вы хотите создать модель, включающую символьное выражение 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
не может преобразовать эти символьные выражения, но выдает предупреждение. Поскольку эти выражения могут привести к неопределенным вызовам функции, всегда проверять результаты преобразования и проверить результаты путем выполнения симуляции, содержащей получившийся блок.
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'})