Я использую функцию ввода парсера много, но теперь я столкнулся следующий вопрос:Input парсер: один параметр зависят от другого параметра
Я кодирование объекта, который вычисляет скорость его изменений временных рядов , т. е. один входной аргумент является матрицей удвоений (timeSeries
). Второй входной параметр - это период времени, используемый для вычисления скорости изменения (lag
). lag
может быть вектором, когда будут вычислены разные скорости изменения. Третий входной вектор называется weightVector
. weightVector
будет использоваться для вычисления среднего значения всех изменений скорости и применения соответствующих весов к соответствующим результатам изменения скорости.
Теперь я всегда хотел бы определить некоторые значения по умолчанию при использовании парсера ввода. Я хотел бы определить weightVector
как вектор с равномерным весом. Однако длина значения по умолчанию weightVector
зависит от длины lag
. Например, если lag = [1,2,3]
, то weightVector
должно быть равно [1/3, 1/3, 1/3]
. Как я должен кодировать такую ситуацию? Мой текущий код для конструкторы выглядит следующим образом:
function obj = roc(timeSeries, varargin)
%% Input parser
% 1. Create input parser instance
p = inputParser;
% 2. Default values for input arguments
default_lag = 1;
default_weightVector = 1/length(lag); % This line is causing
% problems as LAG isn't
% defined, yet.
% 3. Validation of input arguments
valid_lag = {'vector', 'nonempty', 'integer', 'positive'};
check_lag = @(x) validateattributes(x, {'numeric'}, valid_lag);
valid_weightVector = {'vector', 'nonempty'};
check_weightVector = @(x) validateattributes(x, {'numeric'}, ...
valid_weightVector);
% 4. Add input arguments to input scheme
p.addRequired('timeSeries');
p.addParamater('lag', default_lag, check_lag);
p.addParameter('weightVector', default_weightVector, check_weightVector);
% 5. Parse input arguments
parse(p, timeSeries, varargin{:});
% 6. Assign results to variables
lag = p.Results.lag;
weightVector = p.Results.weightVector;
%% Main code
end % Constructor
установить по умолчанию значения никогда не может быть (например, '' NaN' или «» ') и имеет условные после 'parse', что чеки чтобы увидеть, нужно ли генерировать 'weightVector' из проверенной переменной' lag'. – excaza
Спасибо за подсказку. Это сработало для меня ... – Andi