12. Использование подфункций

 

Использование подфункций

Начиная с версии 5.0 в функции системы MATLAB можно включать подфункции. Они объявляются и записываются в теле основных функций и имеют идентичную им конструкцию. Не следует путать эти функции с внутренними функциями, встроенными в ядро системы MATLAB. Ниже представлен пример функции с подфункцией:

function [mean.stdev] = statv(x)

USTATV Interesting statistics.

%Пример функции с встроенной подфункций

n = length(x);

mean = avg(x.n);

stdev = sqrt(sum((x-avg(x.n)). ^ 2)/n);

%--------------------------------------

function m = avg(x.n) £Mean subfunction m = sum(x)/n;

В этом примере среднее значение элементов вектора х вычисляется с помощью подфункции avg(x.n), тело которой записано в теле основной функции statv. Пример использования функции statv представлен ниже:

» V=[l 2345]

V=

12345 

» [a,m]=statv(V)

 а =

m =

1.4142 » statv(V) 

ans =

3

» help statv

STATV Interesting statistics. 

Пример функции с встроенной подфункций

Подфункции определены и действуют локально, т. е. только в пределах т-файла, определяющего основную функцию. Команда help пате выводит комментарий, относящийся только к основной функции, тогда как команда type name выводит весь листинг m-файла. Так что заданные в некотором m-файле подфункции нельзя использовать ни в командном режиме работы, ни в других т-файлах. При обращении к функции интерпретатор системы MATLAB прежде всего просматривает m-файл на предмет выявления подфункций. Если они обнаружены, то задаются как локальные функции. Благодаря локальному действию подфункций их имена могут совпадать с именами основных функций системы. Если в функции и подфункциях должны использоваться общие переменные, их надо объявить глобальными как в функции, так и в ее подфункциях.