allowing for vector of deterministic shocks

time-shift
Michel Juillard 2011-10-13 21:55:55 +02:00
parent 0a3545f2af
commit f94d4e91f3
3 changed files with 64 additions and 5 deletions

View File

@ -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
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
@code{periods} keyword must be matched by only one value in the
@code{values} keyword: this syntax means that the exogenous variable
will have a constant value over the range.
@code{periods} keyword can be matched by only one value in the
@code{values} keyword. If @code{values} represents a scalar, the same
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:
arbitrary expressions are also allowed, but you have to enclose them
@ -2097,6 +2098,18 @@ values (1+p) (exp(z));
end;
@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}
For stochastic simulations, the @code{shocks} block specifies the non

View File

@ -48,11 +48,19 @@ end
switch flag
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
oo_.exo_simul(k,ivar) = oo_.exo_simul(k,ivar).*values;
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
oo_.exo_det_simul(k,ivar) = oo_.exo_det_simul(k,ivar).*values;
end

38
tests/ramst_vec.mod Normal file
View File

@ -0,0 +1,38 @@
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;