Implement MATLAB Functions in Simulink with MATLAB Function Blocks
MATLAB Function blocks enable you to define custom functions in Simulink® models by using the MATLAB® language. MATLAB Function blocks support C/C++ code generation from Simulink Coder™ and Embedded Coder®.
Use these blocks when:
You have an existing MATLAB function that models custom functionality, or it is easy for you to create such a function.
Your model requires custom functionality that is not or cannot be captured in the Simulink graphical language.
You find it easier to model custom functionality by using a MATLAB function than by using a Simulink block diagram.
The custom functionality that you want to model does not include continuous or discrete dynamic states. To model dynamic states, use S-functions. See Create and Configure MATLAB S-Functions.
Calculate Mean and Standard Deviation with a MATLAB Function Block
This example starts with a model that includes a MATLAB Function block and guides you through how to customize the block to calculate the mean and standard deviation for a vector of values.
Open the Model
The model call_stats_block1
includes an empty MATLAB Function block and the blocks you need for the example. Open the model.
Program the MATLAB Function Block
Program the block to calculate the mean and standard deviation for a vector of values.
To open the MATLAB Function Block Editor, double-click the MATLAB Function block. A default function appears in the MATLAB Function Block Editor with two variables: one input and one output argument.
Define the function inputs and outputs by editing the function declaration statement:
function [mean, stdev] = stats(vals)
This statement defines a function called
stats
with three variables. The statement defines an input argument,vals
, and two output arguments,mean
andstdev
.On a new line after the function declaration statement, add the following code:
% Calculates a statistical mean and a standard % deviation for the values in vals. len = length(vals); mean = avg(vals,len); stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len); plot(vals,"-+"); function mean = avg(array,size) mean = sum(array)/size;
Exit the block. The block updates the port names. The function outputs
mean
andstdev
correspond to block output ports mean and stdev and the function inputvals
corresponds to the block input port vals.Complete the connections to the MATLAB Function block as shown.
Save the model as
call_stats_block2
.
Check Properties for MATLAB Function Block Variables
You can check and manage properties for variables in MATLAB Function
blocks. See Create and Define MATLAB Function Block Variables. In this example, verify that the input argument
vals
inherits its type and size properties:
Double-click the MATLAB Function block.
Open the Symbols pane and the Property Inspector. In the Function tab, click Edit Data.
The Symbols pane displays the variable names in the Name column. The Type column determines the function argument port assignment and where it appears in the function declaration statement. In this example,
vals
is assigned to an input port.mean
andstdev
are assigned to output ports. If you change the Type entry for either variable, the function declaration statement also changes.Check the properties for
vals
. In the Symbols pane, click the row forvals
. The Property Inspector updates to show the properties forvals
. The Scope property matches the Type column.Only some properties can be inherited: Size, Unit, Complexity, and Type. Variables indicate that they inherit these properties when Size is
-1
, Unit isinherit
, Complexity isInherited
, and Type isInherit: Same as Simulink
. In this example,vals
uses these values for Size and Type.
Check the other MATLAB Function block variables by selecting them in the Symbols pane.
By default, newly defined input and output variables inherit their size, unit,
complexity, and type. If you want the variables to use a specific size, unit, or type,
you can specify these properties explicitly. For example, enter [2 3]
in the Size property to specify the variable as a
2-by-3
matrix. For more information, see Define and Modify Variable Data Types and Specify Size of MATLAB Function Block Variables.
Build the Function
After you enter code in a MATLAB Function block, you can check the code for errors and build the function. See Debug MATLAB Function Blocks.
When you build a model, MATLAB uses a compiler to compile your MATLAB function block code.
If you have multiple MATLAB-supported compilers installed on your system, you can change the default
compiler using the mex -setup
command. See Change Default Compiler. To see a
list of supported compilers, open Supported and Compatible Compilers, click the tab that corresponds to your
operating system, find the Simulink Product Family table, and go to
the For Model Referencing, Accelerator mode, Rapid Accelerator mode, and
MATLAB Function blocks column.
In Simulink, click Run to simulate the model. The software builds the MATLAB Function block when it builds the model and outputs the data from the function to the two Display blocks.
Prepare the Block for Code Generation
To generate standalone C/C++ code from a model that contains MATLAB Function blocks, use Simulink Coder or Embedded Coder.
Select a Supported Compiler for Simulation and Code Generation Builds
To see a list of supported compilers, open Supported and Compatible Compilers, click the tab that corresponds to your operating system, find the Simulink Product Family table, and go to the Simulink Coder column.
Generate Code for the MATLAB Function Block
If you have a license for Simulink Coder or Embedded Coder, you can generate code from the model. To generate code:
In the
call_stats_block2
model, double-click the MATLAB Function block.Open the Simulink Coder or Embedded Coder app.
On the C Code tab, Build to compile and build the example model.
If you get an error related to the
Variable-step
solver, open the Configuration Parameters window, then click Solver in the left pane. Under Solver selection, set Type toFixed-step
and generate code again. To learn more about the differences between fixed-step and variable-step solvers, see Fixed-Step Versus Variable-Step Solvers.
See Also
MATLAB Function | MATLAB Function Block Editor | add_block
Related Topics
- Specify MATLAB Function Block Properties
- Comparison of Custom Block Functionality
- Call MATLAB Function Files in MATLAB Function Blocks
- Configure MATLAB Function Blocks Programmatically