Материал: MATLAB. Довідник для користувача

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

где input argument – входной аргумент; function name – имя функции;

output argument – выходной аргумент; keyword – зарезервированное слово;

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

function [x,y,z] = sphere(theta, phi, rho)

Если функция не имеет выходных переменных, оставьте выход пустым, например,

function printresults(x)

или используйте пустые квадратные скобки

function [ ] = printresults(x)

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

Строка помощи H1

Строка H1, названная так потому что она является первой строкой текста помощи (Help text), является линией комментария, которая следует непосредственно за строкой определения функции. Поскольку она состоит из текста комментария, строка H1начинается с символа процента (%). Для функции average эта строка имеет вид

% AVERAGE Mean of vector elements.

(СРЕДНЕЕ ЗНАЧЕНИЕ Вычисление среднего значения векторов)

Эта строка является первой строкой текста, который появляется при вводе пользователем в командной строке команды

help function_name

(help имя_функции)

Далее, функция lookfor производит поиск и выводит в командное окно тольку строку H1. Так как данная строка обеспечивает важную обобщающую информацию о М-файле, очень важно сделать ее по возможности более описательной.

101

Текст помощи

Вы можете создать возможность оперативной помощи (справки) для вашей М-функции , путем ввода одной или большего числа строк комментария, начинающихся непосредственно за строкой H1. Текст помощи для функции average имеет вид

%AVERAGE(X), where X is a vector, is the mean of vector elements.

%Nonvector input results in an error.

(% СРЕДНЕЕ(Х), где Х является вектором, вычисляет среднее значение %элементов вектора. Не векторный вход приводит к ошибке).

Когда вы вводите help function_name, MATLAB выводит линии комментариев, которые находятся между строкой определения функции и первой строкой не комментариев (выполняемой или пустой строкой). MATLAB игнорирует любые линии комментариев, которые появляются за данным блоком текста помощи. Например, напечатав help sin получим

SIN Sine.

SIN(X) is the sine of the elements of X.

(SIN(X) является синусом элементов массива Х)

Тело функции

Тело функции содержит все коды системыMATLAB, которые осуществляют вычисления и определяют значения выходных переменных. Выражения в теле функции состоят из обращений к другим функциям, программных конструкций типа команд циклов, ввода и вывода, вычислений, операторов присваивания, комментариев и пустых строк. Например, тело функции average содержит нескольких простых программных выражений:

[m,n] = size(x);

if (~((m == 1) | (n == 1)) | (m == 1 & n == 1)) % Flow control error('Input must be a vector') % Error message display

end

y = sum(x)/length(x); % Computation and assignment

Комментарии

Как было указано ранее, строки комментариев начинаются с символа процента (%). Строки комментариев могут быть в любом месте М-файла, а также вы можете добавить комментарии к концу строки кодов программы. Например,

% Add up all the vector elements.

y = sum(x) % Use the sum function.

( % Суммирование всех элементов вектора. y = sum(x) % Используйте функцию sum)

Первая строка комментариев, следующая непосредственно за строкой определения функции рассматривается как строка H1 данной функции. Строка H1 и любые строки комментариев, непосредственно следующие за Н1, составляют запись оперативной помощи для данного файла. В дополнение к строкам комментариев, вы можете вводить пустые строки в любом месте М-файла. Пустые строки игнорируются. С другой стороны, пустая строка может обозначать конец текста помощи.

102

Имена функций

Имена функций в MATLAB-е имеют те же ограничения, что и имена переменных. MATLAB использует первые 32 символа имени. Имена функций должны начинаться с буквы; остальные знаки могут быть любой комбинацией букв, цифр и символов подчеркивания. Некоторые операционные системы могут вводить свои ограничения на длину имен функций.

Название текстового файла, который содержит функцию MATLAB-а, состоит из имени функции с добавленны расширением .m . Например, average.m. Если имя файла и имя функции в ее строке определения отличаются, то внутреннее имя игнорируется.

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

Как работает функция

Вы можете вызвать М-функцию как из командной строки MATLAB-а, так и из другого М- файла. Убедитесь, что вы включили все необходимые аргументы, заключив входные аргументы в обычные скобки, а выходные – в квадратные.

Определение имени функции

Когда MATLAB сталкивается с новым именем, он осуществляет следующую последовательность шагов:

1.Проверяет, не является ли имя переменной.

2.Проверяет, не является ли имя подпрограммой (subfunction), то есть функцией MATLAB–а, которая находится в пределах того же М-файла, что и вызываемая функция.

3.Проверяет, не является ли имя частной функцией (private function), то есть функцией, которая находится в специальной директории под названиемPrivate (private directory) , то есть директории доступной только для М-файлов в пределах той же директории где она сама находится.

4.Проверяет, находится ли данная на пути доступа MATLAB-а. MATLAB обращается к первому встреченному файлу с заданным именем. Если вы дублируете имена функций, MATLAB обращается к первой встреченной на основe приведенной выше процедуры.

Что происходит при вызове функцию

Когда вы вызываете М-файл из командной строки или же из пределов другой М-функции, MATLAB осуществляет синтаксический анализ функции и преобразует ее в псевдокод, который запоминается в памяти. Это исключает необходимость повторного анализа функции при каждом последующем ее вызове в пределах данного сеанса работы. Псевдокод сохраняется в памяти до тех пор пока вы не удалите его с помощью команды clear, или пока вы не выйдете из MATLAB-а.

В приведенной ниже таблице даны основные варианты применения комндыclear для удаления любых функций из рабочего пространства MATLAB-а.

Синтаксис

Описание

 

clear function_name

Удаляет заданную функцию из рабочего

 

пространства

clear functions

Удаляет все скомпилированные М-функции

 

clear all

Удаляет все переменные и функции

 

103

Создание P-кодов файлов

Вы можете запомнить предварительно скомпилированные функции или сценарии, называемые псевдокодами (P-code) файлов, для использования их в последующих сеансах работы. Например, команда

pcode average

компилирует функцию average.m и запоминает полученный псевдокод в файле называемом average.p. Это позволяет MATLAB-и исключить операцию компилирования при первом вызове функции в каждом сеансе работы. В принципе, MATLAB осуществляет компиляцию весьма быстро, так что запоминание функции в виде псевдокода редко дает большой выигрыш в быстродействии. Единственная ситуация где псевдокод действительно дает ощутимый выигрыш во времени, связана с применением сложных Графических Интерфейсов Пользователя (GUI) в различных приложениях. В этом случае множество М-файлов должны быть скомпилировано прежде чем GUI станет видимым. Другая ситуация, где использование псевдокода является оправданным, имеет место при необходимости сохранить права собствен-

ности, то есть когда вы хотите исключить возможность применения вашего алгоритм другими лицами.

Как MATLAB передает аргументы функции

С точки зрения программиста создается впечатление, чтоMATLAB передает функции все аргументы в виде их значений. В действительности, однако, MATLAB передает значения только тех аргументов, которые изменяются данной функцией. Если функция не изменяет соответствующий аргумент, а просто использует его при вычислениях, MATLAB передает аргумент в виде ссылки на него(на его расположение в памяти) с целью оптимизации использования памяти.

Рабочие пространства функций

Каждая М-функция имеет в памяти свое рабочее пространство, отдельное от основного рабочего пространства MATLAB-а, в котором она работает. Это пространство называется рабочим пространством функции, причем разные функции имеют разные рабочие пространства.

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

Проверка числа аргументов функции

Функции nargin и nargout позволяют вам определить число входных и выходных аргументов функции. Вы можете использовать эти функции с условными операторами для выполнения различных задач в зависимости от числа аргументов. Например,

function c = testarg1(a,b) if (nargin == 1)

c = a.^2; elseif (nargin == 2)

c = a + b;

end

При одном входном аргументе, данная функция вычисляет квадрат входной величины. Если заданы два входных аргумента, функция осуществляет их сложение.

104

Передача переменного числа аргументов

Функции varargin и varargout дают возможность передачи функции любого переменного числа аргументов или возвращать переменное число выходные аргументов. При использовании функци varargin MATLAB объединяет все заданные входные аргументы вмассив ячеек. Если вы используете функциюvarargout, то ваша программа должна обеспечить объединение выходных переменных в массив ячеек, с тем чтобы MATLAB имел возможность вернуть их в пространство вызова. Ниже дан пример функции, которая принимает любое число двумерных векторов, и наносит на графике линию, соединяющую соответствующие точки.

function testvar (varargin) for i = 1:length (varargin) x(i) = varargin{i}(1);

y(i) = varargin{i}(2); end

xmin = min(0,min(x)); ymin = min(0,min(y));

axis([xmin fix(max(x)) + 3 ymin fix(max(y)) + 3]) plot(x,y)

Функция testvar рабоает с различным числом входных переменных; например, вы можете ввести два различных набора данных

testvar ([2 3], [1 5], [4 8], [6 5], [4 2], [2 3]) testvar ([–1 0], [3 –5], [4 2], [1 1])

Распаковка содержимого функции varargin

Поскольку функция varargin содержит все входные аргументы в виде массива ячеек, для извлечения данных необходимо использовать соответствующую индексацию. Например,

y(i) = varargin{i} (2);

Индексация ячеек имеет два набора компонент – первый набор указывает ячейку и заключен в фигурные скобки, а второй набор относится к содержимому ячейки и заключен в обычные скобки. В приведенном выше операторе выражение {i} обозначает обращение к i-ой ячейке в varargin, а выражение (2) представляет второй элемент содержимого выбранной ячейки.

Упаковка выходных переменных в функцию varargout

Когда вы хотите использовать произвольное число выходных аргументов, вы должны предусмотреть процедуру упаковки выходных переменных в массив ячеекvarargout. При этом, для определения конкретного числа вызываемых выходных аргументов используйте функцию nargout. Например, приведенный ниже пример принимает входной массив в виде двух столбцов, где первый столбец характеризует набор данных по оси x, а второй столбец – соответствующий набор данных по оси y . Данные наборы разбиваются на отдельные пары векторов [xi yi], которые вы можете передать описанной выше функции testvar.

function [varargout] = testvar2 (arrayin) for i = 1:nargout

varargout {i} = arrayin (i, :)

end

105