
- •Основы программирования в matlab методические указания
- •Введение
- •1. Виды программ в matlab
- •1.1 Сценарии (скрипты)
- •1.2 Функции
- •1.3 Основные и локальные функции
- •1.4 Вложенные функции
- •1.5 Анонимные функции
- •2. Управляющие конструкции
- •2.1 Условный оператор if
- •2.2 Оператор выбора switch-case
- •2.3 Цикл с определённым количеством итераций
- •2.4 Цикл с неопределённым количеством итераций
- •2.5 Операторы return, break и continue
- •2.6. Функция input
- •3. Комментарии в программе
- •4. Лабораторное задание
- •Библиографический список
- •Содержание
- •09.03.02 «Информационные системы и технологии»
- •09.03.01 «Информатика и вычислительная техника»
- •394026 Воронеж, Московский просп., 14
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