Вы
можете запомнить предварительно скомпилированные функции или сценарии,
называе-мые псевдокодами (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
При одном входном аргументе, данная функция
вычисляет квадрат входной величины. Если заданы два входных аргумента, функция
осуществляет их сложение.
Передача переменного числа аргументов
Функции 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 рабоает с различным числом входных переменных;
например, вы можете ввести два различных набора данных