dynare/matlab/occbin/process_constraint.m

38 lines
1.3 KiB
Matlab
Executable File

% this function looks for occurrences of the endogenous variables in
% endo_names in the input string constraint
% all occurrences of the endogenous variables are appended a suffix
% if the invert_switch is true, the direction of the inequality in the
% constraint is inverted
function constraint1 = process_constraint(constraint,suffix,endo_names,invert_switch)
% create a list of delimiters that can separate parameters and endogenoous
% variables in the string that expresses the constraint
delimiters = char(',',';','(',')','+','-','^','*','/',' ','>','<','=');
% split the string that holds the constraint into tokens
tokens = tokenize(constraint,delimiters);
ntokens = length(tokens);
% search for tokens that match the list of endogenous variables
for i=1:ntokens
if ~isempty(find(strcmp(tokens(i),endo_names)))
% when there is a match with an endogenous variable append the
% suffix
tokens(i) = cellstr([char(tokens(i)),suffix]);
end
% if the invert_switch is true
% reverse the direction of the inequality
if invert_switch
if strcmp(tokens(i),cellstr('>'))
tokens(i) = cellstr('<');
elseif strcmp(tokens(i),cellstr('<'))
tokens(i) = cellstr('>');
end
end
end
% reassemble the tokens to create a string that expresses the constraint
constraint1 = strmerge(tokens);