Fix bug, pac.bgp.set should also work with exogenous variables.

pac-components
Stéphane Adjemian (Ryûk) 2021-09-15 12:04:56 +02:00
parent 809d313b7e
commit 60c8ed1948
Signed by: stepan
GPG Key ID: 295C1FE89E17EB3C
1 changed files with 24 additions and 1 deletions

View File

@ -33,7 +33,15 @@ global M_
eqtag = M_.pac.(pacmodel).tag_map{strcmp(paceq, M_.pac.(pacmodel).tag_map(:,1)),2}; eqtag = M_.pac.(pacmodel).tag_map{strcmp(paceq, M_.pac.(pacmodel).tag_map(:,1)),2};
dummy = []; dummy = [];
ide = find(strcmp(variable, M_.endo_names)); 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 ~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') && length(M_.pac.(pacmodel).equations.(eqtag).additive.vars)>1
if ~isfield(M_.pac.(pacmodel).equations.(eqtag).additive, 'bgp') if ~isfield(M_.pac.(pacmodel).equations.(eqtag).additive, 'bgp')
@ -41,6 +49,11 @@ if ~isempty(ide)
end end
[isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).additive.vars); [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).additive.vars);
if isvar 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; M_.pac.(pacmodel).equations.(eqtag).additive.bgp(ie) = nonzeromean;
return return
end end
@ -51,6 +64,11 @@ if ~isempty(ide)
end end
[isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).optim_additive.vars); [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).optim_additive.vars);
if isvar 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; M_.pac.(pacmodel).equations.(eqtag).optim_additive.bgp(ie) = nonzeromean;
return return
end end
@ -61,11 +79,16 @@ if ~isempty(ide)
end end
[isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.vars); [isvar, ie] = ismember(ide, M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.vars);
if isvar 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; M_.pac.(pacmodel).equations.(eqtag).non_optimizing_behaviour.bgp(ie) = nonzeromean;
return return
end end
end end
warning('%s is not an exogenous variable in equation %s.', variable, paceq) warning('%s is not an exogenous variable in equation %s.', variable, paceq)
else else
error('Endogenous variable %s is unknown.', variable) error('Endogenous/Exogenous variable %s is unknown.', variable)
end end