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
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
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
Stéphane Adjemian
dynare
Commits
47a3a1ed
Commit
47a3a1ed
authored
5 years ago
by
Johannes Pfeifer
Browse files
Options
Downloads
Patches
Plain Diff
Restore dynare_simul.m for Dynare++
Got lost in
21693416
and
9ab832de
Also adapted it to new 4.6 mex-calling syntax
parent
3879ce08
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
dynare++/dynare_simul/dynare_simul.m
+176
-0
176 additions, 0 deletions
dynare++/dynare_simul/dynare_simul.m
with
176 additions
and
0 deletions
dynare++/dynare_simul/dynare_simul.m
0 → 100644
+
176
−
0
View file @
47a3a1ed
%
% 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
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment