To program the functions
you created in Build Model with MATLAB Function in a Chart,
follow these steps:
Open the chart in the model
In the chart, open the function
The function editor appears with the header:
function meanout = meanstats(vals)
This header is taken from the function label in the chart. You can edit the header directly in the editor, and your changes appear in the chart after you close the editor.
On the line after the function header, enter:
%#codegen compilation directive helps
detect compile-time violations of syntax and semantics in MATLAB® functions
supported for code generation.
Enter a line space and this comment:
% Calculates the statistical mean for vals
Add the line:
len = length(vals);
an example of a built-in MATLAB function that is supported for
code generation. You can call this function directly to return the
vector length of its argument
vals. When you build
a simulation target, the function length is implemented with generated
C code. Functions supported for code generation appear in Functions and Objects Supported for C and C++ Code Generation
— Alphabetical List.
len is an example of implicitly
declared local data. It has the same size and type as the value assigned
to it — the value returned by the function
double. To learn more about declaring
variables, see Data Definition Basics.
The MATLAB function treats implicitly declared local data
as temporary data, which exists only when the function is called and
disappears when the function exits. You can declare local data for
a MATLAB function in a chart to be persistent by using the
Enter this line to calculate the value
meanout = avg(vals,len);
meanstats stores the mean of
the Stateflow® data
meanout. Because these
data are defined for the parent Stateflow chart, you can use
them directly in the MATLAB function.
Two-dimensional arrays with a single row or column of elements
are treated as vectors or matrices in MATLAB functions. For example,
meanstats, the argument
a four-element vector. You can access the fourth element of this vector
with the matrix notation
vals(4,1) or the vector
The MATLAB function uses the functions
compute the value of
a function supported for code generation.
a local function that you define later. When resolving function names, MATLAB functions
in your chart look for local functions first, followed by functions
supported for code generation.
Note: If you call a function that the MATLAB function cannot resolve as a local function or a function for code generation, you must declare the function to be extrinsic.
Now enter this statement:
Enter this line to plot the input values
vals against their vector index.
Recall that you declared
plot to be an extrinsic
function because it is not supported for code generation. When the MATLAB function
encounters an extrinsic function, it sends the call to the MATLAB workspace
for execution during simulation.
define the local function
avg, as follows:
function mean = avg(array,size) mean = sum(array)/size;
The header for
avg defines two arguments,
and a single return value,
mean. The local function
the average of the elements in
array by dividing
their sum by the value of argument
The complete code for the function
function meanout = meanstats(vals) %#codegen % Calculates the statistical mean for vals len = length(vals); meanout = avg(vals,len); coder.extrinsic('plot'); plot(vals,'-+'); function mean = avg(array,size) mean = sum(array)/size;
Save the model.
Back in the chart, open the function
add code to compute the standard deviation of the values in
The complete code should look like 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;
Save the model again.