Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетодичкаИПлб.doc
Скачиваний:
38
Добавлен:
08.05.2019
Размер:
6.96 Mб
Скачать

5. Разновидности m-функций

Оформление алгоритма в виде одной файл-функции не всегда комфортно. Часто повторяющиеся действия, выполняемые в функции, следует оформлять в виде отдельной функции. Но если эту вспомогательную функцию реализовать как автономную программную единицу, то придется передавать ее через систему параметров основной функции, что не всегда удобно, а иногда и просто невозможно. Matlab предоставляет дополнительные способы организации связи между функциями – оформление подфункций и вложенных функций. Использование таких функций основано на выделении части алгоритма в самостоятельную функцию, текст которой содержится в том же m-файле, что и основная функция.

5.1. Подфункции

Основная файл-функция может содержать одну или несколько подфункций, каждая со своими входными и выходными параметрами. Текст подфункций располагается в m-файле после текста основной функции. Подфункции m-файла не могут быть вызваны извне. Это своего рода функции внутреннего использования. Вызов подфункции инициирует основная функция m-файла.

Синтаксически подфункции оформляются также как и обычные функции Matlab. Заголовок очередной подфункции одновременно является признаком конца предыдущей. Основная функция обменивается информацией со своими подфункциями при помощи системы параметров и/или глобальной пересылки данных.

Рассмотрим пример функции с подфункциями. Предположим, что в некоторой функции basik_func приходится многократно вычислять значение некоторого выражения для различных значений операндов. В простейшем случае текст функции basik_func будет содержать однотипные предложения

function basik_func(x,step)

f1=sin(x)+cos(x);

x1=x-step;

f2=sin(x-step)+cos(x-step);

x2=x+step;

f3=sin(x+step)+cos(x+step);

Проще и нагляднее определить вычисляемое выражение в подфункции sub_func и поместить ее в том же m-файле

function basik_func(x,step)

%основная функция

f1=sub_func(x);

f2=sub_func(x-step);

f3=sub_func(x+step);

function f=sub_func(arg)

%подфункция

f=sin(arg)+cos(arg);

Переменные, определенные в подфункциях и в основной функции, являются локальными, они доступны только в пределах своей функции.

5.2. Вложенные функции

Не смотря на то, что основная функция и подфункция находятся в одном m-файле, подфункция является внешней по отношению к основной функции. Вложенная функция является внутренней по отношению к основной. В силу этого обстоятельства переменные из рабочей среды основной функции доступны во вложенной. Поскольку вложенная функция охватывается основной и может размещаться в любом месте ее тела, то при написании функций следует использовать end для обозначения их концов. Например

function y1=f1(arg1,arg2)

% операторы функции f1

function y2=f2(x)

% операторы функции f2

function y3=f3(a,b)

% операторы функции f3

end %конец вложенной функции f3

% операторы функции f2

end %конец вложенной функции f2

% операторы функции f1

end %конец главной функции f1

Уровень вложенности функций не ограничен. Функция может обратиться к своей вложенной функции, но не может использовать вложенную функцию более низкого уровня. В приведенном примере функция f1 может обратиться к вложенной в нее функции f2, но не может напрямую вызвать f3. Вложенная функция может обратиться к функции того же уровня. Функция нижнего уровня может вызвать функцию верхнего уровня, в которую она вложена, и все функции, доступные из нее.

В одном m-файле допускается одновременное использование подфункций и вложенных функций. В этом случае текст подфункции должен заканчиваться оператором end.