Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
dynare
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Dynare
dynare
Merge requests
!1713
Restore dynare_simul.m for Dynare++
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
Restore dynare_simul.m for Dynare++
JohannesPfeifer/dynare:dynare++_simul
into
master
Overview
2
Commits
1
Pipelines
2
Changes
1
Merged
Johannes Pfeifer
requested to merge
JohannesPfeifer/dynare:dynare++_simul
into
master
5 years ago
Overview
2
Commits
1
Pipelines
2
Changes
1
Expand
Got lost in
21693416
and
9ab832de
Also adapted it to new 4.6 mex-calling syntax
0
0
Merge request reports
Compare
master
version 1
fd1e273f
5 years ago
master (base)
and
latest version
latest version
47a3a1ed
1 commit,
5 years ago
version 1
fd1e273f
1 commit,
5 years ago
1 file
+
176
−
0
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
dynare++/dynare_simul/dynare_simul.m
0 → 100644
+
176
−
0
Options
%
% SYNOPSIS
%
% r = dynare_simul(name, shocks)
% r = dynare_simul(name, prefix, shocks)
% r = dynare_simul(name, shocks, start)
% r = dynare_simul(name, prefix, shocks, start)
%
% name name of MAT-file produced by dynare++
% prefix prefix of variables in the MAT-file
% shocks matrix of shocks
% start zero period value
%
% Note that this file requires the dynare_simul_ DLL to be in the path.
% This DLL is distributed with Dynare, under the mex/matlab or mex/octave
% subdirectory.
%
% SEMANTICS
%
% The command reads a decision rule from the MAT-file having the given
% prefix. Then it starts simulating the decision rule with zero time value
% equal to the given start. It uses the given shocks for the simulation. If
% the start is not given, the state about which the decision rule is
% centralized is taken (called fix point, or stochastic steady state, take
% your pick).
%
% prefix Use the prefix with which you called dynare++, the default
% prefix in dynare++ is 'dyn'.
% shocks Number of rows must be a number of exogenous shocks,
% number of columns gives the number of simulated
% periods. NaNs and Infs in the matrix are substitued by
% draws from the normal distribution using the covariance
% matrix given in the model file.
% start Vector of endogenous variables in the ordering given by
% <prefix>_vars.
%
% Seed for random generator is derived from calling rand(1,1). Therefore,
% seeding can be controlled with rand('state') and rand('state',some_seed).
%
% EXAMPLES
%
% All examples suppose that the prefix is 'dyn' and that your_model.mat
% has been loaded into Matlab.
%
% 1. response to permanent negative shock to the third exo var EPS3 for
% 100 periods
%
% shocks = zeros(4,100); % 4 exogenous variables in the model
% shocks(dyn_i_EPS3,:) = -0.1; % the permanent shock to EPS3
% r = dynare_simul('your_model.mat',shocks);
%
% 2. one stochastic simulation for 100 periods
%
% shocks = zeros(4,100)./0; % put NaNs everywhere
% r = dynare_simul('your_model.mat',shocks);
%
% 3. one stochastic simulation starting at 75% undercapitalized economy
%
% shocks = zeros(4,100)./0; % put NaNs everywhere
% ystart = dyn_ss; % get copy of DR fix point
% ystart(dyn_i_K) = 0.75*dyn_ss(dyn_i_K); % scale down the capital
% r = dynare_simul('your_model.mat',shocks,ystart);
%
%
% SEE ALSO
%
% "DSGE Models with Dynare++. A Tutorial.", Ondra Kamenik, 2005
% Copyright (C) 2005-2011, Ondra Kamenik
% Copyright (C) 2020, Dynare Team
function
r
=
dynare_simul
(
varargin
)
if
~
exist
(
'dynare_simul_'
,
'file'
)
error
(
'Can
''
t find dynare_simul_ DLL in the path. The simplest way to add it is to run Dynare once in this session.'
)
end
% get the file name and load data
fname
=
varargin
{
1
};
load
(
fname
);
% set prefix, shocks, ystart
if
ischar
(
varargin
{
2
})
prefix
=
varargin
{
2
};
if
length
(
varargin
)
==
3
shocks
=
varargin
{
3
};
ystart
=
NaN
;
elseif
length
(
varargin
)
==
4
shocks
=
varargin
{
3
};
ystart
=
varargin
{
4
};
else
error
(
'Wrong number of parameters.'
);
end
else
prefix
=
'dyn'
;
if
length
(
varargin
)
==
2
shocks
=
varargin
{
2
};
ystart
=
NaN
;
elseif
length
(
varargin
)
==
3
shocks
=
varargin
{
2
};
ystart
=
varargin
{
3
};
else
error
(
'Wrong number of parameters.'
);
end
end
% load all needed variables but prefix_g_*
if
exist
([
prefix
'_nstat'
],
'var'
)
nstat
=
eval
([
prefix
'_nstat'
]);
else
error
([
'Could not find variable '
prefix
'_nstat in workspace'
]);
end
if
exist
([
prefix
'_npred'
],
'var'
)
npred
=
eval
([
prefix
'_npred'
]);
else
error
([
'Could not find variable '
prefix
'_npred in workspace'
]);
end
if
exist
([
prefix
'_nboth'
],
'var'
)
nboth
=
eval
([
prefix
'_nboth'
]);
else
error
([
'Could not find variable '
prefix
'_nboth in workspace'
]);
end
if
exist
([
prefix
'_nforw'
],
'var'
)
nforw
=
eval
([
prefix
'_nforw'
]);
else
error
([
'Could not find variable '
prefix
'_nforw in workspace'
]);
end
if
exist
([
prefix
'_ss'
],
'var'
)
ss
=
eval
([
prefix
'_ss'
]);
else
error
([
'Could not find variable '
prefix
'_ss in workspace'
]);
end
if
exist
([
prefix
'_vcov_exo'
],
'var'
)
vcov_exo
=
eval
([
prefix
'_vcov_exo'
]);
else
error
([
'Could not find variable '
prefix
'_vcov_exo in workspace'
]);
end
nexog
=
size
(
vcov_exo
,
1
);
if
isnan
(
ystart
)
ystart
=
ss
;
end
% newer version of dynare++ doesn't return prefix_g_0, we make it here if
% it does not exist in workspace
g_zero
=
[
prefix
'_g_0'
];
if
~
exist
(
g_zero
,
'var'
)
dr
.
g_0
=
zeros
(
nstat
+
npred
+
nboth
+
nforw
,
1
);
else
dr
.
g_0
=
eval
(
g_zero
);
end
% make derstr a string of comma seperated existing prefix_g_*
order
=
1
;
cont
=
1
;
while
cont
==
1
g_ord
=
[
prefix
'_g_'
num2str
(
order
)];
if
exist
(
g_ord
,
'var'
)
dr
.
([
'g_'
num2str
(
order
)])
=
eval
(
g_ord
);
order
=
order
+
1
;
else
cont
=
0
;
end
end
% set seed
seed
=
ceil
(
10000
*
rand
(
1
,
1
));
% call dynare_simul_
[
err
,
r
]
=
dynare_simul_
(
order
-
1
,
nstat
,
npred
,
nboth
,
nforw
,
...
nexog
,
ystart
,
shocks
,
vcov_exo
,
seed
,
ss
,
dr
);
if
err
error
(
'Simulation failed'
)
end
\ No newline at end of file
Loading