Место функций varargin и varargout в списке аргументов

End

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

Plot(x,y)

End

Function testvar (varargin)

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

End

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

 

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

 

for i = 1:length (varargin)

x(i) = varargin{i}(1);

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

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

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

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

 

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

 

function [varargout] = testvar2 (arrayin)

for i = 1:nargout

varargout {i} = arrayin (i, :)

 

Оператор присваивания в цикле for использует синтаксис индексации массивов ячеек. Вот пример применения функции testvar2:

 

a = {1 2; 3 4 ; 5 6 ; 7 8; 9 0};

[p1, p2, p3, p4, p5] = testvar2 (a);

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

function [out1,out2] = example1(a,b,varargin)

function [i,j,varargout] = example2(x1,y1,x2,y2,flag)

 

Локальные и глобальные переменные

Каждая исполняемая функция MATLAB-а, определенная некоторым М-файлом, имеет свои собственные локальные переменные расположенные в своем рабочем пространстве, которые отделены от локальных переменных других функций и переменных в основном рабочем про-странстве. Однако, если несколько функций и, возможно, основное рабочее пространство, объявляют некоторую конкретную переменную глобальной, то все эти функции и основное рабочее пространство будут иметь доступ к данной переменной. Любое изменение глобаль-ной переменной, произведенное в пространстве какой-либо одной функции, немедленно воспринимается всеми остальными функциями, где эта переменная объявлена глобальной. Допустим, вы хотите изучить эффект изменения коэффициентов взаимосвязей aиb,в диф-ференциальном уравнении Лотки-Вольтера (Lotka-Volterra), известного как модель хищника-жертвы.

 

dy1/dt = y1 - ay1y2

dy2/dt = y2 - by1y2

Создадим М-файл lotka.m.

 

function yp = lotka(t,y)