A MATLAB® function in a Stateflow® chart is a graphical element that you use to write algorithms that are easier to implement by calling built-in MATLAB functions. Typical applications include:
Data analysis and visualization
This type of function is useful for coding algorithms that are more easily expressed by using MATLAB instead of the graphical Stateflow constructs. MATLAB functions also provide optimizations for generating efficient, production-quality C code for embedded applications.
A MATLAB function can reside anywhere in a chart, state, or subchart. The location of the function determines the set of states and transitions that can call the function.
If you want to call the function within one state or subchart and its substates, put your MATLAB function in that state or subchart. That function overrides any other functions of the same name in the parents and ancestors of that state or subchart.
If you want to call the function anywhere in a chart, put your MATLAB function at the chart level.
If you want to call the function from any chart in your model, put your MATLAB function at the chart level and enable exporting of chart-level functions. For more information, see Export Stateflow Functions for Reuse.
A MATLAB function can access chart and state data above it in the Stateflow hierarchy.
For example, this MATLAB function has the name
stdevstats. It takes an argument
vals and returns an output value
To compute the standard deviation of the values in
the function uses this
function stdevout = stdevstats(vals) %#codegen % Calculates the standard deviation for vals len = length(vals); stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len); function mean = avg(array,size) mean = sum(array)/size;
In the object palette, click the MATLAB function icon . Move your pointer to the location for the new MATLAB function in your chart.
Enter the signature label for the function.
The function signature label specifies a name for your function and the formal names for its arguments and return values. A signature label has this syntax:
[return_val1,return_val2,...] = function_name(arg1,arg2,...)
You can use the same variable name for both arguments and return values. For example, a function with this signature label uses the variables
y2 as both inputs and outputs:
[y1,y2,y3] = f(y1,u,y2)
y2are passed by reference (as pointers), and
uis passed by value. Passing inputs by reference reduces the number of times that the generated code copies intermediate data, resulting in more optimal code.
Do not use the name of a chart symbol as a function argument or return value. For example, if either
y are chart data, defining a function with the signature
y = f(x) results in a run-time error.
To program the function, open the MATLAB editor by double-clicking the function box.
In the MATLAB editor, enter the MATLAB code implementing your function. For more information, see Program a MATLAB Function in a Chart.
In the Model Explorer, expand the chart object and select the MATLAB function. The arguments and return values of the function signature appear
as data items that belong to your function. Arguments have the scope
Input. Return values have the scope
In the Data properties dialog box for each argument and return value, specify the data properties, as described in Set Data Properties.
Create any additional data items required by your function. For more information, see Add Data Through the Model Explorer.
Your function can access its own data or data belonging to parent states or the chart. The data items in the function can have one of these scopes:
Constant — Constant data retains its initial value through
all function calls.
Parameter — Parameter data retains its initial value through
all function calls.
In MATLAB functions, you do not need to create local or temporary function data
explicitly. If you use an undefined variable, Stateflow creates a temporary variable that is available to the rest of the
function. To store values that persist across function calls, use the keyword
You can call MATLAB functions from the actions of any state or transition. You can also call MATLAB functions from other functions. If you export a MATLAB function, you can call it from any chart in the model.
To call a MATLAB function, use the function signature and include an actual argument value for each formal argument in the function signature. If the data types of the actual and formal arguments differ, the function casts the actual argument to the type of the formal argument.
You can specify properties for a MATLAB function in the Model Explorer or the MATLAB Function properties dialog box.
To use the Model Explorer:
To open the Model Explorer, in the Modeling tab, select Model Explorer.
In the Model Hierarchy pane, select the MATLAB function.
In the MATLAB Function pane, edit the MATLAB function properties.
To use the MATLAB Function properties dialog box:
In the Stateflow Editor, right-click the MATLAB function.
Edit the MATLAB function properties.
You can also specify MATLAB function properties programmatically by using
Stateflow.EMFunction objects. For more
information about the Stateflow programmatic interface, see Overview of the Stateflow API.
Function name. Click the function name link to open your function in the MATLAB editor.
Controls the inlining of your function in generated code:
Auto — Determines whether to inline your function
based on an internal calculation.
Inline — Inlines your function if you do not export
it to other charts and it is not part of a recursion. (A recursion exists if your
function calls itself directly or indirectly through another function call.)
Function — Does not inline your function.
Signature label for your function. The function signature label specifies a name for your function and the formal names for its arguments and return values.
Specifies whether integer overflows saturate in the generated code. For more information, see Handle Integer Overflow for Chart Data.
This property applies only to MATLAB functions in charts that use C as the action language. In charts that use MATLAB as the action language, the behavior of data depends on the value of the Saturate on integer overflow property for the chart.
fimath properties for the MATLAB function. The
fimath properties specified are associated
fimath objects constructed in the
MATLAB function. Choose one of these options:
Same as MATLAB — The function uses the same
fimath properties as the current global
fimath. The edit box appears dimmed and displays the current
fimath in read-only form. For more information on the
fimath objects, see the
Fixed-Point Designer™ documentation.
Specify Other — Specify your own
object by one of these methods:
fimath object inside the edit box.
fimath object in the MATLAB or model workspace and enter its variable name in the edit
This property applies only to MATLAB functions in charts that use C as the action language. In charts that use MATLAB as the action language, the behavior of data depends on the value of the MATLAB Chart fimath property for the chart.
Function description. You can enter brief descriptions of functions in the hierarchy.
Link to online documentation for the function. You can enter a web URL address or a MATLAB command that displays documentation in a suitable online format, such as an HTML file or text in the MATLAB Command Window. When you click the Document link hyperlink, Stateflow displays the documentation.