Подобно файл-сценарию, файл-функция представляет собой файл с простым текстом, который может находится в вашем текущем либо в любом другом каталоге. Файл-функции отличаются от сценариев тем, что позволяют задавать входные параметры, когда вы их запускаете из командной строки MATLAB или из другого M-файла.
Ниже представлен M-файл-функция с именем rad.m, созданный для нахождения длины d = радиус - вектора точки (x;y;z) трехмерного пространства:
function d=rad(x,y,z)
%Вычисление длины d=sqrt(x^2+y^2+z^2) радиус-вектора точки (x;y;z)
d=sqrt(x^2+y^2+z^2);
Структура M-файлов-функций следующая.
Первая строка в M-файле-функции называется строкой определения функции и начинается со слова function. В окне редактора M-файлов это зарезервированное слово выделяется синим цветом. Первая строка M-файла задает имя функции, а также количество аргументов (или параметров) ввода и вывода. В этом примере функция называется rad. Имя файла (за исключением расширения .m) и имя функции должны совпадать. Когда вы создаете этот новый M-файл-функцию в безымянном окне редактора и выбираете команду Save (Сохранить), модуль Editor (Редактор) сам присваивает файлу имя rad.m. Функция в нашем примере имеет для ввода три элемента, которые внутри M-файла обозначены как x, y, z. В качестве результата возращаетсяодин элемент – значение d, появляющееся в конце выполнения функции.
За строкой определения функции может следовать несколько строк - комментариев, начинающихся со знака процента %. Эти строки называются текстом справки об используемой функции и отображаются при вводе команды help. В M-файле rad.m присутствует только одна строка текста справки; она отображается при введении команды help rad.
Остальные строки содержат выражения системы MATLAB, которые производят вычисление значений функции. Строки комментариев (строки, начинающиеся со знака процента %) могут быть в любой области M-файла. Они не являются исполняемыми инструкциями. Цель их размещения в тексте программы – пояснить смысл той или иной части программного кода. Все выражения в M-файле-функции, которые обычно производят вывод результатов, должны оканчиваться точкой с запятой с целью пресечения вывода результатов промежуточных вычислений.
Покажем, как используется файл-функция rad.m для вычисления длины радиус - вектора точки (2;3;4):
>> rad(2,3,4)
ans =
5.3852
Ответ 5,3852 будет возвращен и сохранен под именем ans независимо от того, заданы или нет x, y, z и d в вашей рабочей области. Переменные, которые используются в файл-функции, такие как x, y, z и d в файле rad.m, являются локальными переменными. Запуск M-файла-функции не задает эти переменные в рабочей области и не изменяет их параметры, если переменные с такими же именами в рабочей области были заданы ранее. Система MATLAB не запоминает значения этих переменных после того, как M-файл-функция будет выполнен, а область оперативной памяти, в которой они хранились, освобождается. Убедимся в этом, выполнив команду who:
>> who
Your variables are:
ans
M-файлы-функции могут иметь множество аргументов ввода и вывода. Ниже представлен пример файла с именем rad2.m с тремя входными и двумя выходными параметрами, вычисляющего длину d и квадрат длины d2 радиус - вектора точки трехмерного пространства (x; y; z):
function [d,d2]=rad2(x,y,z)
d2=x^2+y^2+z^2;
d=sqrt(d2);
Если вы введете rad2(2,3,4), то только первый аргумент вывода будет возвращен и сохранен под именем ans:
>> rad2(2,3,4)
ans =
5.3852
Чтобы увидеть оба результата вывода, надо присвоить эти результаты переменным, заключенным квадратные скобки:
>> [d,d2]=rad2(2,3,4)
d =
5.3852
d2 =
Введя d=rad2(2,3,4), вы можете присвоить первый аргумент вывода переменной d:
>> d=rad2(2,3,4)
d =
5.3852
При вводе d2=rad2(2,3,4) нельзя получить второй аргумент вывода, т. к. переменной d2 будет также присвоен первый результат:
>> d2=rad2(2,3,4)
d2 =
5.3852
Передача информации из командного окна MATLAB в файл-функцию осуществляется с помощью параметров функции. Другой механизм передачи информации – глобальные переменные. Файл-функция может и не иметь входных или выходных параметров, заголовки таких файл-функций приведены ниже:
function noout(a,b), function [v,u]=noin, function noarg().
Для того чтобы рабочая область MATLAB и файл-функция могли совместно использовать некоторую переменную с заданным именем, ее всюду нужно объявить как глобальную с помощью команды global.
Приведем пример файл-функции rad3 без входных параметров:
function [d,d2]=rad3
global x y z
d2=x^2+y^2+z^2;
d=sqrt(d2);
Вызов ее осуществляется следующим образом:
>> global x y z
>> x=2;y=3;z=4;
>> [m,n]=rad3
m =
5.3852
n =
Параметрами файл-функций могут быть не только числа или скалярные переменные, но и массивы требуемых размеров. Поэтому желательно создавать векторизованные версии М-файлов – вместо операторов <^>, <*>, </> следует применять операторы <.^>, <.*>, <./>. Векторизация осуществляется командой vectorize (см. разд. 1.7).
Созданный M-файл можно сохранить не только в текущем, но и в любом другом каталоге. В этом случае перед запуском M-файла на выполнение нужно установить пути поиска, ведущие к нему. По умолчанию текущим является подкаталог work основного каталога MATLAB. Для того, чтобы увидеть его содержимое, в главном меню MATLAB выберите команду View => Current Directory (Вид=>Текущий каталог). В результате раскроется окно, в котором отобразится список файлов и вложенных папок активного в данный момент каталога.
Чтобы изменить текущий каталог, введите путь к новому каталогу в поле Current Directory либо выберите его в раскрывающемся списке этого поля. Или же щелкните на кнопке справа от от поля Current Directory, и отыщите нужную папку в раскрывшемся диалоговом окне Обзор папок.
Справочную информация по M-функциям можно получить, введя команду doc function.
Вопросы для самопроверки
1. Как вызвать редактор M-файлов?
2. Что такое сценарий?
3. Что такое файл-функция?
4. Какова структура M-файла, содержащего файл-функцию?
5. Какую роль играют строки комментариев, располагаемые сразу за заголовком файл-функции?
6. Как осуществляется передача информации из командного окна MATLAB в файл-функцию?