Working with Persistent Variables
This example shows how to generate a MEX function from a MATLAB function,compute_average
, that uses persistent variables. It illustrates that you must clear the state of persistent variables before using the function to compute the average of a new set of values.
Prerequisites
There are no prerequisites for this example.
About thecompute_average
Function
Thecompute_average.m
function uses two persistent variables, the accumulated sum and the number of values added so far, so that you can call the function with one value at a time.
typecompute_average
% y = compute_average(x) % This function takes an input scalar value 'x' and returns the average % value so far. function y = compute_average(x) %#codegen assert(isa(x,'double')); % Input is scalar double % Declare two persistent variables 'sum' and 'cnt'. persistent sum cnt; % Upon the first call we need to initialize the variables. if isempty(sum) sum = 0; cnt = 0; end % Compute the accumulated sum and the number of values so far. sum = sum + x; cnt = cnt + 1; % Return the current average. y = sum / cnt;
The%#codegen
directive indicates that the MATLAB code is intended for code generation.
Generate the MEX Function
First, generate a MEX function using the commandcodegen
followed by the name of the MATLAB file to compile.
codegencompute_average
By default,codegen
generates a MEX function namedhello_world_mex
in the current folder. This allows you to test the MATLAB code and MEX function and compare the results.
Run the MEX Function
(10 + 20 + 100) / 3 = 43.3333
compute_average_mex(10)
ans = 10
compute_average_mex(20)
ans = 15
compute_average_mex(100)
ans = 43.3333
Clear the Internal State of Persistent Variables
Clear the persistent variables by using theclear mex
command.
clearmex
Run the MEX Function Again to Calculate the Average of a Different Set of Values
(10 + 20 + 30 + 40) / 4 = 25
compute_average_mex(10)
ans = 10
compute_average_mex(20)
ans = 15
compute_average_mex(30)
ans = 20
compute_average_mex(40)
ans = 25