exponenta event banner

Создание функциональных блоков MATLAB из символьных выражений

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

Создание и редактирование блока

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

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'})