Система математических расчетов MATLAB

Методическое пособие - Компьютеры, программирование

Другие методички по предмету Компьютеры, программирование

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

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

 

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

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

 

function c = testarg1(a,b)

if (nargin == 1)

c = a.^2;

elseif (nargin == 2)

c = a + b;

end

 

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

 

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

Функции 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

 

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

 

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

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

 

 

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

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

 

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

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

 

 

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

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