M- функции, так же как и script, содержат команды, операторы и функции, но являются более сложным типом m -файлов по сравнению со script и имеют свои особенности:
· начинаются с заголовка описания m -функции;
· могут иметь входные и выходные параметры;
· все переменные, описанные в теле m -функции, являются локальными, т.е. действуют только в пределах тела функции;
· являются самостоятельными программными единицам, которые общаются с другими модулями посредством имени с входными и выходными параметрами.
В отличие от script m- функция является типичным объектом языка программирования высокого уровня.
При создании новой m- функции открывается окно редактора
со следующим шаблоном (рис. 1.3.3-1).
Рис. 1.3.3-1. Структура новой m-функции
Общая структура m- функции с n входными и m выходными параметрами имеет вид:
function[ var1, …, var m,… ] = f_name (список входных параметров)
% Основной комментарий
% Дополнительный комментарий
Тело m-функции
var1 = выражение
…
var m = выражение
End
Начинаются m- функции с заголовка function, затем в квадратных скобках через запятую указываются имена выходных параметров, далее f_name – имя функции, а затем в круглых скобках - список входных параметров функции. Имена функций должны быть уникальными.
M- функция возвращает свое значение (или значения) и может быть вызвана из выражений, расположенных в рабочей области или в других программных модулях:
f_name ( список_параметров ).
По умолчанию все переменные, описанные в теле m -функции, являются локальными, т.е. определены только в пределах функции, в которых они описаны. Между собой m -функции общаются посредством своего имени и входных и выходных параметров. Конструкция
vаri = выражение,
приведенная в общей структуре m -функции, используется, если требуется, чтобы функция возвращала результаты вычислений.
Поскольку m -функция может иметь не один, а несколько выходных параметров, то она во многом напоминает процедуру. Поэтому ее нельзя использовать непосредственно в математических выражениях. Если функция, имеющая несколько выходных параметров, используется как функция, имеющая единственный выходной параметр, то для возврата значения будет использоваться первый из них. Это зачастую ведет к ошибкам в математических вычислениях. Поэтому обращение к m -функции с несколькими выходными параметрами должно иметь вид:
[ var1,var2,... ]= f_nаmе(Список_параметров)
Создадим простейшую m -функцию с двумя входными и одним выходным аргументами. При активизации Редактора появился шаблон, который заполним следующей информацией (рис. 1.3.3-2).
Рис. 1.3.3-2. Описание m -функции с одним выходным параметром
Сохраним функцию в файле, используя инструмент Save. При этом отметим, что MatLab предлагает в качестве имени m -файла название самой функции, т.е. tt.m. Всегда сохраняйте файл-функцию в m -файле, имя которого совпадает с именем m-функции! Теперь, убедившись, что каталог с файлом tt.m. является текущим, обратимся к функции tt(2, 3) из командной строки (рис. 1.3.3-3).
Рис. 1.3.3-3. Обращение к m -функции tt(a,b)
При вызове m -функции tt(a, b) входные аргументы a и b получили соответственно значения 2 и 3, сумма a и b записана в выходной параметр c, значение выходного аргумента c присвоено переменной y, а результат вывелся в следующую строку командного окна.
Следующий пример показывает создание m- функции с несколькими выходными параметрами. Список выходных параметров в заголовке m -функции заключен в квадратные скобки, а сами параметры отделены запятыми. В качестве примера создадим и выполним m -функцию quadeq(a, b, c), которая по заданным коэффициентам квадратного уравнения находит его корни (рис. 1.3.3-4, 1.3.3-5).
Рис. 1.3.3-4. Описание функции quadeq(a, b, c)
с двумя выходными параметрами
Рис. 1.3.3-5. Выполнение функции quadeq(a, b, c)
с двумя выходными параметрами
Иногда и при создании m -функций желательно применение глобальных переменных (например, если параметров слишком много). В таких случаях используемые глобальные переменные надо объявить командой:
global varl, var2,...
Для того чтобы несколько функций могли совместно использовать глобальные переменные, они должны быть объявлены как global в каждом из модулей.