Этот пример показывает, как сгенерировать MEX-функцию от функции MATLAB, compute_average
, который использует персистентные переменные. Это иллюстрирует, что необходимо очистить состояние персистентных переменных перед использованием функции, чтобы вычислить среднее число нового множества значений.
Нет никаких предпосылок для этого примера.
compute_average
Функция compute_average.m
использует две персистентных переменные, накопленную сумму и количество значений, добавленных до сих пор, так, чтобы можно было вызвать функцию с одним значением за один раз.
type compute_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;
Директива %#codegen
указывает, что код MATLAB предназначается для генерации кода.
Во-первых, сгенерируйте MEX-функцию с помощью команды codegen
, сопровождаемый под названием файл MATLAB, чтобы скомпилировать.
codegen compute_average
По умолчанию codegen
генерирует MEX-функцию под названием hello_world_mex
в текущей папке. Это позволяет вам тестировать код MATLAB и MEX-функцию и сравнивать результаты.
(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 mex
.
clear mex
(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