Будьте внимательны – при работе в режиме Cell Mode выполнение каждой ячейки по сочетанию клавиш Ctrl + Enter не приводит к перезаписыванию файла программы. Если созданный сценарий сохранить с именем sqr.m в текущем каталоге, то для его выполнения в дальнейшем можно просто в командном окне набрать команду sqr. Недостаток сценариев очевиден – чтобы выполнить программу для других значений входных данных, нужно вносить изменения в исходный код. Вызывать сценарии из других программ также неэффективно, поскольку все переменные сценария вляются глобальными. Значительно большие возможности по написанию программ представляют функции MATLAB. Ключевым отличием является то, что все переменные внутри функции являются локальными (за исключением входных и выходных данных функции, которые должны передаваться в функцию из внешней программы и обратно). Синтаксис определения функции в MATLAB таков:


Пример 16.
Определение функции в исходном коде
1 function [out1, out2, ...] = myfun(in1, in2, ...)

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


Пример 17.
Простейшая MATLAB функция
1%нашапервая функция
2 function [y,f] = sqr(x)
3 y=x;
4 f=x.^2;
5 whos

Синтаксис вызова этой функции следующий [x,f] = sqr(x). Понятно, что перед вызовом необходимо определить вектор входных значений x, для удобства можно ввести в консоли следующее: x=[1 2 3 4 5]. В результате вызова функции в рабочем пространстве появятся две переменных. Обратите внимание, что объявленная внутри функции новая переменная y, будучи локальной, не была передана в рабочее пространство. Команда whos выводит в консоли информацию не о всех переменных рабочего пространства, а только о тех, которые определены внутри функции.


Пример 18.
Результат вызова функции [x,f] = sqr(x)
1 >> [x,f]=sqr(x)
2 Name Size Bytes Class Attributes
3 f 1x5 40 double
4 x 1x5 40 double
5 y 1x5 40 double
6
7 x =
8 1 2 3 4 5
9 f =
10 1 4 9 16 25

Если необходимо сделать какую-то переменную внутри функции глобальной, то её просто следует объявить с ключевым именем global. При этом переменная по-прежнему будет отсутствовать в рабочем пространстве, но будет доступна вне кода данной функции, например в качестве входных данных других функций. Независимо от того, сценарий или функция определены внутри файла с расширением .m при вводе имени этого файла в командном окне, находящаяся внутри него программа выполняется.