%% 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 the compute_average Function
% The compute_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.

type compute_average

% The %#codegen directive indicates that the MATLAB code is intended for code generation.
%
%% Generate the MEX Function
% First, generate a MEX function using the command codegen followed by the name of the MATLAB file to compile.

codegen compute_average

% By default, codegen generates a MEX function named hello_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)
compute_average_mex(20)
compute_average_mex(100)

%
%% Clear the Internal State of Persistent Variables
% Clear the persistent variables by using the clear mex command.

clear mex

%
%% 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)
compute_average_mex(20)
compute_average_mex(30)
compute_average_mex(40)

% Copyright 2018 The MathWorks, Inc.