Verified Commit 72ad793d authored by Sébastien Villemot's avatar Sébastien Villemot
Browse files

Dynare++: improvements to comments

[skip ci]
parent 27add4ec
Pipeline #1270 skipped
This diff is collapsed.
......@@ -4,8 +4,10 @@
/* This file only defines a generic interface to a DSGE model. The model
takes the form:
$$E_t\left[f(g^{**}(g^*(y,u_t),u_{t+1}),g(y,u),y,u_t)\right]=0$$
The interface is defined via pure virtual class |DynamicModel|. */
𝔼ₜ(f(g**(g*(y,uₜ),uₜ₊₁),g(y,uₜ),yₜ,uₜ)) = 0
The interface is defined via pure virtual class DynamicModel. */
#ifndef DYNAMIC_MODEL_H
#define DYNAMIC_MODEL_H
......@@ -32,54 +34,61 @@ public:
void writeMatIndices(mat_t *fd, const std::string &prefix) const;
};
/* This is the interface to an information on a generic DSGE
model. It is sufficient for calculations of policy rule Taylor
approximations at some (not necessarily deterministic) steady state.
We need to know a partitioning of endogenous variables $y$. We suppose
that $y$ is partitioned as
$$y=\left[\matrix{\hbox{static}\cr\hbox{pred}\cr\hbox{both}\cr\hbox{forward}}\right]$$
of which we define
$$y^*=\left[\matrix{\hbox{pred}\cr\hbox{both}}\right]\quad
y^{**}=\left[\matrix{\hbox{both}\cr\hbox{forward}}\right]$$
where ``static'' are meant those variables, which appear only at time
$t$; ``pred'' are meant those variables, which appear only at $t$ and
$t-1$; ``both'' are meant those variables, which appear at least at
$t-1$ and $t+1$; and ``forward'' are meant those variables, which
appear only at $t$ and $t+1$. This partitioning is given by methods
|nstat()|, |npred()|, |nboth()|, and |nforw()|. The number of
equations |numeq()| must be the same as a number of endogenous
variables.
In order to complete description, we need to know a number of
exogenous variables, which is a size of $u$, hence |nexog()| method.
/* This is the interface to an information on a generic DSGE model. It is
sufficient for calculations of policy rule Taylor approximations at some
(not necessarily deterministic) steady state.
We need to know a partitioning of endogenous variables y. We suppose that y
is partitioned as:
⎡ static⎤
⎢ pred ⎥
y = ⎢ both ⎥
⎣forward⎦
of which we define:
⎡pred⎤ ⎡ both ⎤
y* = ⎣both⎦ y** = ⎣forward⎦
where “static” are meant those variables, which appear only at time t;
“pred” are meant those variables, which appear only at t and t−1; “both” are
meant those variables, which appear at least at t−1 and t+1; and “forward”
are meant those variables, which appear only at t and t+1. This partitioning
is given by methods nstat(), npred(), nboth(), and nforw(). The number of
equations numeq() must be the same as a number of endogenous variables.
In order to complete description, we need to know a number of exogenous
variables, which is a size of u, hence nexog() method.
The model contains an information about names of variables, the
variance-covariance matrix of the shocks, the derivatives of equations
of $f$ at some steady state, and the steady state. These can be
retrieved by the corresponding methods.
variance-covariance matrix of the shocks, the derivatives of equations of f
at some steady state, and the steady state. These can be retrieved by the
corresponding methods.
The derivatives of the system are calculated with respect to stacked
variables, the stack looks as:
$$\left[\matrix{y^{**}_{t+1}\cr y_t\cr y^*_{t-1}\cr u_t}\right].$$
There are only three operations. The first
|solveDeterministicSteady()| solves the deterministic steady steate
which can be retrieved by |getSteady()| later. The method
|evaluateSystem| calculates $f(y^{**},y,y^*,u)$, where $y$ and $u$ are
passed, or $f(y^{**}_{t+1}, y_t, y^*_{t-1}, u)$, where $y^{**}_{t+1}$,
$y_t$, $y^*_{t-1}$, $u$ are passed. Finally, the method
|calcDerivativesAtSteady()| calculates derivatives of $f$ at the
current steady state, and zero shocks. The derivatives can be
retrieved with |getModelDerivatives()|. All the derivatives are done
up to a given order in the model, which can be retrieved by |order()|.
The model initialization is done in a constructor of the implementing
class. The constructor usually calls a parser, which parses a given
file (usually a text file), and retrieves all necessary information
about the model, inluding variables, partitioning, variance-covariance
matrix, information helpful for calculation of the deterministic
steady state, and so on. */
variables, the stack looks like:
⎡y**ₜ₊₁⎤
⎢ yₜ ⎥
⎢ y*ₜ₋₁⎥
⎣ uₜ ⎦
There are only three operations. The first solveDeterministicSteady() solves
the deterministic steady steate which can be retrieved by getSteady() later.
The method evaluateSystem() calculates f(y**,y,y*,u), where y and u are
passed, or f(y**ₜ₊₁, yₜ, y*ₜ₋₁, u), where y**ₜ₊₁, yₜ, y*ₜ₋₁, u are passed.
Finally, the method calcDerivativesAtSteady() calculates derivatives of f at
the current steady state, and zero shocks. The derivatives can be retrieved
with getModelDerivatives(). All the derivatives are done up to a given order
in the model, which can be retrieved by order().
The model initialization is done in a constructor of the implementing class.
The constructor usually calls a parser, which parses a given file (usually a
text file), and retrieves all necessary information about the model,
inluding variables, partitioning, variance-covariance matrix, information
helpful for calculation of the deterministic steady state, and so on. */
class DynamicModel
{
......
Markdown is supported
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