Пользовательские функции и файл-скрипты

Файл-скрипт

Любую последовательность команд в MATLAB можно оформить в виде m-файла.

  • Файл-скрипт не имеет входных и выходных аргументов.
  • Файл-скрипт работает с данными из рабочей области.
  • Все переменные, объявленные в файл-скрипте, являются глобальными.

Структура файл-скрипта

% Файл-скрипт my_script.m
% Комментарий,
% который появляется при вызове команды
% help my_script

x = 0:0.1:0.1;
y = sin(x);

plot(x,y);

Запустить, или другими словами выполнить последовательность действий, записанных в файл-скрипте, можно несколькими способами

  • запустить скрипт из редактора, нажав F5 (MS Windows)
  • набрать в консоли (Command window) имя скрипта и нажать Enter.

Во втором случае файл-скрипт должен находится в текущем (рабочем) каталоге

или в списке каталогов, которые просматривает MATLAB. Этот список можно изменить нажав кнопку Set Path на ленте Home

Файл-скрипт можно для удобства разделить на секции при помощи удвоенного знака процента %%. Код в каждой секции можно выполнить отдельно от остального кода, нажав F9 (MS Windows), когда курсор находится в нужной секции.

Файл-функции

Собственные функции можно создавать тремя основными способами, используя

  • inline функции
  • анонимные функции
  • файл-функции

Inline-функции

Inline-функция объявляется при следующим образом:

>> f1 = inline('x1^2+x2^2', 'x1', 'x2');
>> f1(4,2)

т.е. вызывается функция inline, в которую первым аргументов передается строка - выражение от аргументов функции, которые передаются следующим аргументами также в виде строк. В выражениях inline-функций не могут использоваться имена переменных из рабочей среды, а только переменные – аргументы, объявленные в функции inline.

Вызывается объявленная inline, как и любая другая функция, например, для объявленной выше функции двух переменных:

>> f1(4,2)

Анонимные функции

Более практичны в сравнении с inline-функциями анонимные функции, которые могут содержать имена переменных из рабочей среды. Анонимные функции также можно использовать для объявления коротких однострочных функций, создание для которых отдельных m-файлов нецелесообразно.

Анонимная функция объявляется при помощи символа @, за которым в круглых скобках следуют аргументы функции, а затем её выражение, например, для объявления функции

f(x_1, x_2) = x_1^2 + x_2^2

необходимо написать

>> f = @(x1,x2) x1^2+x2^2;

Анонимные функции удобно использовать внутри выражений, например для построения графика функции x^2 + sin(x) на интервале от 0 до 5 можно написать

>> f = @(x) x.^2 + sin(x);
>> fplot( f, 0, 5 );

но проще использовать анонимную функцию прямо в функции fplot

>> fplot( @(x) x.^2 + sin(x), 0, 5);

Файл-функция

  • Файл-функция содержит определение одной или нескольких функций.
  • По-умолчанию все переменные, объявленные внутри файл-функции, являются локальными.
  • Файл-функция является самостоятельным программным модулем, который связан с другими модулями и головной программой через входные и выходные параметры.

Создание файл-функции: File -> New -> Function

% Комментарий к функции
% 
function [res1, res2] my_function(x1, x2)
    res1 = x1^2 + x2^2;
    res2 = x1 + x2;

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

% Комментарий к функции
% 
function [res1, res2] my_function(x1, x2)
    global g;
    res1 = g + x1^2 + x2^2;
    res2 = x1 + x2;

Имя файла и имя объявленной в нем функции должны совпадать. Как и для файл-скриптов каталог, в котором содержатся вызываемые функции, должен быть текущим (рабочим) или добавлен в список просматриваемых MATLAB.

Функция прекращает работу после выполнения последнего оператора. Принудительно завершить функцию можно директивой return.

Файл-функция вместе с определением основной функции может содержать определения вспомогательных функций, доступных к вызову только из основной функции. Переменные, используемые во внутренних функциях локальные.

function f = myfun(x)
    f1 = infun(x);
    f  = f1 + cos(x);

% Внутренняя функция
function res = infun(x)
    a = 3;
    res = sin(x*3);