Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
nbCqmVlOPg.doc
Скачиваний:
9
Добавлен:
30.04.2022
Размер:
151.04 Кб
Скачать

1.3 Основные и локальные функции

M-файл функции может содержать определения нескольких функций. Это позволяет разбить решение задачи на простые подзадачи.

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

Как уже упоминалось выше, переменные каждой функции доступны только в её области видимости.

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

Функции в m-файле можно завершать ключевым словом end, но это не обязательно.

Структура m-файла с локальными функциями выглядит следующим образом:

function [результат] = имя основной функции (аргументы)

команды

function [результат] = имя локальной функции 1 (аргументы)

команды

function [результат] = имя локальной функции N (аргументы)

команды

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

Вложенная функция – функция, которая полностью находится в области действия родительской функции. Любая функция в программном файле может содержать вложенные функции.

Создадим и запустим следующий файл (parent.m):

function parent

disp(‘Это родительская функция’)

nestedfx

function nestdfx

disp(‘А это вложенная’)

end

end

Как уже было сказано, доступ к переменным функции извне невозможен, но т.к. вложенные функции находятся внутри родительской, то на них это ограничение не распространяется. Более того, переменные, созданные внутри вложенных функций, на самом деле создаются в рабочем пространстве родительской.

К вложенным функциям предъявляются следующие требования:

  • Обычно после функций можно не указывать ключевое слово end. Однако если в файле находится вложенная функция, все функции должны заканчиваться оператором end’.

  • Вложенные функции нельзя объявить внутри управляющих конструкций MATLAB (они будут рассмотрены ниже).

  • Вложенные функции должны вызываться по имени.

  • Все переменные, используемые вложенными и родительскими функциями должны объявляться заранее либо в родительской, либо во вложенной функции.

В качестве примера создадим и запустим функцию parentfunc:

function result = parentfunc(value)

disp(‘Это родительская функция’)

nestedfunc(value)

function nestedfunc(n)

disp(‘А это вложенная’)

x = n;

end

result = x;

end

1.5 Анонимные функции

Анонимные функции – функции, которые не содержатся в файлах. Они лишь привязываются к некоторой переменной-указателю (дескриптору). Анонимные функции принимают и возвращают различные значения так же, как и обычные функции. Однако они состоят только из одного выражения.

Синтаксис определения функции следующий:

дескриптор функции = @(аргументы) выражение;

Анонимная функция без аргументов определяется следующим образом:

дескриптор функции = @() выражение;

Если мы хотим, чтобы функция возвращала несколько значений, то необходимо написать выражение, которое будет возвращать матрицу чисел.

Рассмотрим пример. Создадим функцию, вычисляющую квадрат указанного числа:

>> sqr = @(x) x.^2;

>> a = sqr(5)

a =

25

Многие функции MATLAB принимают в качестве аргументов дескрипторы функций. Это даёт возможность производить вычисления над множеством значений. Можно также создавать дескрипторы для функций, записанных в m-файлах. Преимущество анонимных функций состоит в том, что они не требуют создания отдельных файлов и могут быть созданы «на месте»:

>> integral(@(x) x.^2, 0, 1)

ans =

0.3333

Ещё один интересный приём заключается в создании сложных анонимных функций. Это может быть полезно, если мы передаём параметры функции, которую вычисляем на некотором диапазоне значений. Пусть требуется проинтегрировать выражение x2 + cx + 1 от 0 до 1, c – параметр. Анонимные функции позволяют решить эту задачу очень просто:

>> g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1))

>> g(3)

ans =

2.8333

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]