Generate MATLAB Function Blocks from Symbolic Expressions
Using matlabFunctionBlock
, you can generate a MATLAB® Function block. The generated block is available for use in Simulink® models, whether or not the computer running the simulations has a license for
Symbolic Math Toolbox™.
Generate and Edit a Block
Suppose, you want to create a model involving the symbolic expression r =
sqrt(x^2 + y^2)
. Before you can convert a symbolic expression to a
MATLAB Function block, create an empty model or open an existing one:
new_system('my_system') open_system('my_system')
Create a symbolic expression and pass it to the matlabFunctionBlock
command. Also specify the block name:
syms x y r = sqrt(x^2 + y^2); matlabFunctionBlock('my_system/my_block', r)
If you use the name of an existing block, the matlabFunctionBlock
command replaces the definition of an existing block with the converted symbolic
expression.
You can open and edit the generated block. To open a block, double-click it.
function r = my_block(x,y) %#codegen % x = complex(x); % required to enforce complex operations on x % y = complex(y); % required to enforce complex operations on y r = sqrt(x.^2+y.^2);
Tip
Some symbolic expressions cannot be represented using MATLAB functions. matlabFunctionBlock
cannot convert these
symbolic expressions, but issues a warning. Since these expressions might result in
undefined function calls, always check conversion results and verify results by
running the simulation containing the resulting block.
Control the Order of Input Ports
matlabFunctionBlock
generates input variables and the corresponding
input ports in alphabetical order from a symbolic expression. To change the order of
input variables, use the vars
option:
syms x y mu = sym('mu'); dydt = -x - mu*y*(x^2 - 1); matlabFunctionBlock('my_system/my_block', dydt,'vars', [y mu x])
Name the Output Ports
By default, matlabFunctionBlock
generates the names of the output
ports as the word out
followed by the output port number, for
example, out3
. The output
option allows you to use
the custom names of the output ports:
syms x y mu = sym('mu'); dydt = -x - mu*y*(x^2 - 1); matlabFunctionBlock('my_system/my_block', dydt,'outputs',{'name1'})