diff --git a/matlab/get_aux_variable_id.m b/matlab/get_aux_variable_id.m new file mode 100644 index 000000000..59b1d00e2 --- /dev/null +++ b/matlab/get_aux_variable_id.m @@ -0,0 +1,48 @@ +function ida = get_aux_variable_id(var) + +% Returns the index of an auxiliary variable in M_.aux_vars +% +% INPUTS +% - var [string, integer] Variable name or index in M_.endo_names. +% +% OUTPUTS +% - ida [integer] Corresponding index in M_.aux_vars. + +% Copyright (C) 2018 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +global M_ + +if ischar(var) + id = strmatch(var, M_.endo_names, 'exact'); + if isempty(var) + error('Variable %s is unkown.', var) + else + var = id; + end +else + if ~isint(var) || var>M_.endo_nbr || var<1 + error('Input must be the name of an endogenous variable or an integer between 1 and %s!', num2str(M_.endo_nbr)) + end +end + +if var<=M_.orig_endo_nbr + % var is not an auxiliary variable. + ida = 0; +else + ida = find([M_.aux_vars.endo_index]==var); +end \ No newline at end of file diff --git a/matlab/get_difference_order.m b/matlab/get_difference_order.m new file mode 100644 index 000000000..65be18af0 --- /dev/null +++ b/matlab/get_difference_order.m @@ -0,0 +1,56 @@ +function n = get_difference_order(var) + +% Returns true iff endogenous variable `var` is a variable in difference. +% +% INPUTS +% - var [string, integer] Variable name or index in M_.endo_names. +% +% OUTPUTS +% - boo [logical] true/false. + +% Copyright (C) 2018 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +global M_ + +% Get index of the auxiliary +id = get_aux_variable_id(var); + +% Set default difference order +n = 0; + +% If var is not an auxiliary variable it cannot be a first difference. +if ~id, return, end + +while id + if M_.aux_vars(id).type==8 + % diff auxiliary variable. + n = n+1; + v = M_.aux_vars(id).orig_index; + if v<=M_.orig_endo_nbr + id = 0; + else + id = get_aux_variable_id(v); + end + elseif M_.aux_vars(id).type==9 + % lagged diff auxiliary variable + v = M_.aux_vars(id).orig_index; + id = get_aux_variable_id(v); + else + break + end +end \ No newline at end of file diff --git a/matlab/get_equation_number_by_tag.m b/matlab/get_equation_number_by_tag.m new file mode 100644 index 000000000..596a5c1b3 --- /dev/null +++ b/matlab/get_equation_number_by_tag.m @@ -0,0 +1,32 @@ +function eqnumber = get_equation_number_by_tag(eqname) + +% Translates an equation name into an equation number. +% +% INPUTS +% - eqname [string] Name of the equation. +% +% OUTPUTS +% - eqnumber [integer] Equation number. + +% Copyright (C) 2018 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +global M_ + +eqnumber = strmatch(eqname, M_.equations_tags(strmatch('name', M_.equations_tags(:,2), 'exact'), 3), 'exact'); + +if isempty(eqnumber), eqnumber = 0; end \ No newline at end of file diff --git a/matlab/isdiff.m b/matlab/isdiff.m new file mode 100644 index 000000000..b61967e37 --- /dev/null +++ b/matlab/isdiff.m @@ -0,0 +1,37 @@ +function boo = isdiff(var) + +% Returns true iff endogenous variable `var` is a v ariable in difference. +% +% INPUTS +% - var [string, integer] Variable name or index in M_.endo_names. +% +% OUTPUTS +% - boo [logical] true/false. + +% Copyright (C) 2018 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +global M_ + +ida = get_aux_variable_id(var); +boo = false; + +if ~ida, return, end + +if ismember(M_.aux_vars(ida).type, [8, 9]) + boo = true; +end \ No newline at end of file