Commit f94d4e91 authored by MichelJuillard's avatar MichelJuillard
Browse files

allowing for vector of deterministic shocks

parent 0a3545f2
...@@ -2070,9 +2070,10 @@ It is possible to specify shocks which last several periods and which can ...@@ -2070,9 +2070,10 @@ It is possible to specify shocks which last several periods and which can
vary over time. The @code{periods} keyword accepts a list of vary over time. The @code{periods} keyword accepts a list of
several dates or date ranges, which must be matched by as many shock values several dates or date ranges, which must be matched by as many shock values
in the @code{values} keyword. Note that a range in the in the @code{values} keyword. Note that a range in the
@code{periods} keyword must be matched by only one value in the @code{periods} keyword can be matched by only one value in the
@code{values} keyword: this syntax means that the exogenous variable @code{values} keyword. If @code{values} represents a scalar, the same
will have a constant value over the range. value applies to the whole range. If @code{values} represents a vector,
it must have as many elements as there are periods in the range.
Note that shock values are not restricted to numerical constants: Note that shock values are not restricted to numerical constants:
arbitrary expressions are also allowed, but you have to enclose them arbitrary expressions are also allowed, but you have to enclose them
...@@ -2097,6 +2098,18 @@ values (1+p) (exp(z)); ...@@ -2097,6 +2098,18 @@ values (1+p) (exp(z));
end; end;
@end example @end example
A second example with a vector of values:
@example
xx = [1.2; 1.3; 1];
shocks;
var e;
periods 1:3;
values (xx);
end;
@end example
@customhead{In stochastic context} @customhead{In stochastic context}
For stochastic simulations, the @code{shocks} block specifies the non For stochastic simulations, the @code{shocks} block specifies the non
......
...@@ -48,11 +48,19 @@ end ...@@ -48,11 +48,19 @@ end
switch flag switch flag
case 0 case 0
oo_.exo_simul(k,ivar) = repmat(values,length(k),1); if size(values,1) == 1
oo_.exo_simul(k,ivar) = repmat(values,length(k),1);
else
oo_.exo_simul(k,ivar) = values;
end
case 1 case 1
oo_.exo_simul(k,ivar) = oo_.exo_simul(k,ivar).*values; oo_.exo_simul(k,ivar) = oo_.exo_simul(k,ivar).*values;
case 2 case 2
oo_.exo_det_simul(k,ivar) = repmat(values,length(k),1); if size(values,1) == 1
oo_.exo_det_simul(k,ivar) = repmat(values,length(k),1);
else
oo_.exo_det_simul(k,ivar) = values;
end
case 3 case 3
oo_.exo_det_simul(k,ivar) = oo_.exo_det_simul(k,ivar).*values; oo_.exo_det_simul(k,ivar) = oo_.exo_det_simul(k,ivar).*values;
end end
......
var c k;
varexo x;
parameters alph gam delt bet aa;
alph=0.5;
gam=0.5;
delt=0.02;
bet=0.05;
aa=0.5;
model;
c + k - aa*x*k(-1)^alph - (1-delt)*k(-1);
c^(-gam) - (1+bet)^(-1)*(aa*alph*x(+1)*k^(alph-1) + 1 - delt)*c(+1)^(-gam);
end;
initval;
x = 1;
k = ((delt+bet)/(1.0*aa*alph))^(1/(alph-1));
c = aa*k^alph-delt*k;
end;
steady;
check;
a=[1.2; 1.1];
shocks;
var x;
periods 1:2;
values (a);
end;
simul(periods=200);
rplot c;
rplot k;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment