В C я мог бы сделать что-то вроде этого:
#define MAGIC_NUMBER (88)
int foo(int a, int b, int c) {
return a + b + c + MAGIC_NUMBER;
}
double bar(double x, double n) {
return x + n + MAGIC_NUMBER;
}
/*
* ...and so on with many kind-of-long functions using
* MAGIC_NUMBER instead of writing a literal 88 like so:
*/
double bar(double x, double n) {
return x + n + 88;
}
Что я должен сделать в Matlab? (Потребности работать через несколько файлов.)
Вы можете определить глобальную переменную или объявить функцию, которая просто возвращает постоянное значение (вторая возможность выглядит лучше).
В настоящее время нет действительно хорошего ответа. Если вы хотите просто определить простую переменную, которая будет видна в вашей рабочей области, то
f00 = 88;
очевидно, что это работает. Но она не будет видна в других функциях. Поэтому вы можете определить ее как глобальную переменную, но тогда вам придется объявлять каждую переменную как глобальную в каждой функции, которой она понадобится. На мой взгляд, это выглядит нелогично. Немного лучше, IMHO, определить функцию m-file для foo.
function returnvalue = f00
% returns the scalar value of 88
returnvalue = 88;
(Обратите внимание, что здесь у меня есть строка комментария. Она возвращается, когда вы вызываете help foo, также lookfor увидит эту строку. Рекомендуется более качественная помощь, чем эта, но мне сейчас лень.)
Пока foo.m находится на пути поиска, эта функция всегда возвращает значение 88. Обратите внимание, что я не включил никаких аргументов. Но вы можете быть более изобретательны и, возможно, разрешить аргумент размера, так что foo(N) будет вести себя так же, как нули, единицы и глаза. В этом и заключается приятная особенность использования функции. Она может делать именно то, что вы хотите. Так что, возможно...
function returnvalue = f00(varargin)
% returns the scalar value of 88, or replicated elements if a size is supplied
% usage: foo
% usage: foo(N)
% usage: foo(N1,N2,...)
%
% arguments:
% N - a scalar or vector that denotes the number
% of repeated elements (all 88) to be generated
%
% returnvalue - a scalar (or vector/array) of
% size indicated by N.
%
% see also: ones, zeros, eye
if (nargin == 0)
% no arguments, so return a scalar 88
returnvalue = 88;
elseif (nargin == 1) && isscalar(varargin{1})
% be consistent with ones, zeros, eye, etc.
returnvalue = repmat(88,[varargin{1},varargin{1}]);
elseif (nargin == 1)
% the size is a vector already
if isvector(varargin{1})
returnvalue = repmat(88,varargin{1});
else
error('FOO:impropersize','Size argument cannot be a general array')
end
elseif
% nargin must have been more than 1
returnvalue = repmat(88,cell2mat(varargin));
end
Возможно, я мог бы лучше проверить ошибки выше, но вы должны понять общую идею.
Я поддерживаю ответ AB, объявите функцию, которая просто возвращает постоянное значение.
Другая возможность - просто #define все, что вы хотите, и предварительная обработка ваших .m файлов с помощью cpp. Однако тогда вы потеряете интерактивный характер разработки в Matlab.