38 lines
1.4 KiB
Matlab
Executable File
38 lines
1.4 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); |