From 60c8ed1948a640cd9f449e9413cde8460ecd1dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Ry=C3=BBk=29?= Date: Wed, 15 Sep 2021 12:04:56 +0200 Subject: [PATCH] Fix bug, pac.bgp.set should also work with exogenous variables. --- matlab/+pac/+bgp/set.m | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/matlab/+pac/+bgp/set.m b/matlab/+pac/+bgp/set.m index ccb92f85a..d48f20ec2 100644 --- a/matlab/+pac/+bgp/set.m +++ b/matlab/+pac/+bgp/set.m @@ -33,7 +33,15 @@ global M_ eqtag = M_.pac.(pacmodel).tag_map{strcmp(paceq, M_.pac.(pacmodel).tag_map(:,1)),2}; dummy = []; + ide = find(strcmp(variable, M_.endo_names)); +xflag = false; +if isempty(ide) + % variable is not an endogenous variable + ide = find(strcmp(variable, M_.exo_names)); + xflag = true; +end + if ~isempty(ide) if isfield(M_.pac.(pacmodel).equations.(eqtag), 'additive') && length(M_.pac.(pacmodel).equations.(eqtag).additive.vars)>1 if ~isfield(M_.pac.(pacmodel).equations.(eqtag).additive, 'bgp') @@ -41,6 +49,11 @@ if ~isempty(ide) end [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).additive.vars); if isvar + if xflag + assert(~M_.pac.(pacmodel).equations.(eqtag).additive.isendo(ie), 'Variable type issue.') + else + assert(M_.pac.(pacmodel).equations.(eqtag).additive.isendo(ie), 'Variable type issue.') + end M_.pac.(pacmodel).equations.(eqtag).additive.bgp(ie) = nonzeromean; return end @@ -51,6 +64,11 @@ if ~isempty(ide) end [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).optim_additive.vars); if isvar + if xflag + assert(~M_.pac.(pacmodel).equations.(eqtag).optim_additive.isendo(ie), 'Variable type issue.') + else + assert(M_.pac.(pacmodel).equations.(eqtag).optim_additive.isendo(ie), 'Variable type issue.') + end M_.pac.(pacmodel).equations.(eqtag).optim_additive.bgp(ie) = nonzeromean; return end @@ -61,11 +79,16 @@ if ~isempty(ide) end [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.vars); if isvar + if xflag + assert(~M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.isendo(ie), 'Variable type issue.') + else + assert(M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.isendo(ie), 'Variable type issue.') + end M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.bgp(ie) = nonzeromean; return end end warning('%s is not an exogenous variable in equation %s.', variable, paceq) else - error('Endogenous variable %s is unknown.', variable) + error('Endogenous/Exogenous variable %s is unknown.', variable) end \ No newline at end of file