Оба сценария и функции позволяют повторно использовать последовательности команд, сохраняя их в программных файлах. Сценарии представляют собой простейший тип программы, поскольку они хранят команды точно так же, как их можно ввести в командной строке. Функции обеспечивают большую гибкость, прежде всего потому, что можно передавать входные значения и возвращать выходные значения. Например, эта функция с именем fact вычисляет факториал числа (n) и возвращает результат (f).
function f = fact(n) f = prod(1:n); end
Этот тип функции должен быть определен в файле, а не в командной строке. Часто функция сохраняется в собственном файле. В этом случае рекомендуется использовать одно и то же имя для функции и файла (в этом примере: fact.m), поскольку MATLAB ® связывает программу с именем файла. Сохраните файл в текущей папке или в папке на пути поиска MATLAB.
Функцию можно вызвать из командной строки, используя те же синтаксические правила, которые применяются к функциям, установленным с помощью MATLAB. Для экземпляров вычислите факториал 5.
x = 5; y = fact(5)
y = 120
Начиная с R2016b, другой возможностью хранения функций является включение их в конец файла сценария. Например, создайте файл с именем mystats.m с несколькими командами и двумя функциями, fact и perm. Сценарий вычисляет перестановку (3,2).
x = 3; y = 2; z = perm(x,y) function p = perm(n,r) p = fact(n)/fact(n-r); end function f = fact(n) f = prod(1:n); end
Вызовите сценарий из командной строки.
mystats
z =
6Первой строкой каждой функции является оператор definition, который включает следующие элементы.
| Используйте символы в нижнем регистре для ключевого слова. |
Выходные аргументы (необязательно) | Если функция возвращает один вывод, можно указать имя вывода после function myOutput = myFunction(x)Если функция возвращает несколько выходных данных, заключите имена выходных данных в квадратные скобки. function [one,two,three] = myFunction(x)Если выходных данных нет, их можно опустить. function myFunction(x)Или можно использовать пустые квадратные скобки. function [] = myFunction(x) |
Имя функции (обязательно) | Допустимые имена функций соответствуют тем же правилам, что и имена переменных. Они должны начинаться с буквы и могут содержать буквы, цифры или знаки подчеркивания. Примечание Чтобы избежать путаницы, используйте одно и то же имя как для файла функции, так и для первой функции в файле. MATLAB связывает вашу программу с именем файла, а не с именем функции. Имя файла сценария не может совпадать с именем функции в файле. |
Входные аргументы (необязательно) | Если функция принимает какие-либо входные данные, заключите их имена в скобки после имени функции. Разделяйте входные данные запятыми. function y = myFunction(one,two,three)Если входные данные отсутствуют, можно опустить круглые скобки. |
Совет
При определении функции с несколькими входными или выходными аргументами сначала перечислите все требуемые аргументы. Этот порядок позволяет вызывать функцию без указания необязательных аргументов.
Тело функции может включать допустимые выражения MATLAB, инструкции потока управления, комментарии, пустые строки и вложенные функции. Любые переменные, создаваемые в рамках функции, хранятся в конкретной рабочей области, которая отделена от базовой рабочей области.
Файлы программ могут содержать несколько функций. Если файл содержит только определения функций, первая функция является основной функцией и является функцией, которую MATLAB связывает с именем файла. Функции, следующие за основной функцией или кодом сценария, называются локальными функциями. Локальные функции доступны только в файле.
Функции заканчиваются на end оператор, конец файла или строка определения для локальной функции, в зависимости от того, что наступит раньше. end оператор требуется, если:
Любая функция в файле содержит вложенную функцию (функцию, полностью содержащуюся в родительском файле).
Функция является локальной функцией в файле функции, и любая локальная функция в файле использует end ключевое слово.
Функция является локальной функцией в файле сценария.
Хотя иногда это необязательно, используйте end для лучшей читаемости кода.