diff --git a/doc/dynare.texi b/doc/dynare.texi index 5c849fd52975a5afed95c9b735edc209d5075ab5..a1142ac787ab29ceaf35d6f100d5752a8d04d8cc 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -1618,22 +1618,34 @@ model_local_variable GDP_US $GDPUS$; @subsection On-the-fly Model Variable Declaration Endogenous variables, exogenous variables, and parameters can also be declared -inside the model block. To do this, simply follow the symbol name with a -vertical line (@code{|}) and either an @code{e}, an @code{x}, or a -@code{p}. For example, to declare a parameter named @code{alphaa} in the model -block, you could write @code{alphaa|p} directly in an equation where it -appears. Similarly, to declare an endogenous variable @code{c} in the model -block you could write @code{c|e}. These on-the-fly variable declarations do not -have to appear in the first place where this variable is encountered. Note that +inside the model block. You can do this in two different ways: either via the +equation tag or directly in an equation. + +To declare a variable on-the-fly in an equation tag, simply state the type of +variable to be declared (@code{endogenous}, @code{exogenous}, or +@code{parameter} followed by an equal sign and the variable name in single +quotes. Hence, to declare a variable @code{c} as endogenous in an equation tag, +you can type @code{[endogenous='c']}. + +To perform on-the-fly variable declaration in an equtaion, simply follow the +symbol name with a vertical line (@code{|}) and either an @code{e}, an +@code{x}, or a @code{p}. For example, to declare a parameter named +@code{alphaa} in the model block, you could write @code{alphaa|p} directly in +an equation where it appears. Similarly, to declare an endogenous variable +@code{c} in the model block you could write @code{c|e}. Note that in-equation on-the-fly variable declarations must be made on contemporaneous variables. +On-the-fly variable declarations do not have to appear in the first place where +this variable is encountered. + As an example, the following two snippets are equivalent: @emph{Using on-the-fly variable and parameter declaration} @example model; +[endogenous='k',name='law of motion of capital'] k(+1) = i|e + (1-delta|p)*k; -y|e = k|e^alpha|p; +y|e = k^alpha|p; @dots{} end; delta = 0.025; @@ -1648,6 +1660,7 @@ delta = 0.025; alpha = 0.36; @dots{} model; +[name='law of motion of capital'] k(1) = i|e + (1-delta|p)*k; y|e = k|e^alpha|p; @dots{} diff --git a/preprocessor b/preprocessor index 244552393baec541e0d02a2c378a21a6c9409989..e0bf2b60b65814f66c4009f2e36cfcdabdb7f913 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit 244552393baec541e0d02a2c378a21a6c9409989 +Subproject commit e0bf2b60b65814f66c4009f2e36cfcdabdb7f913 diff --git a/tests/example1.mod b/tests/example1.mod index 90e039904ae10f048f34d01140456c28f50a54d2..54b0ffa9c26b9e84af21ea4b932acb6a7778fb4c 100644 --- a/tests/example1.mod +++ b/tests/example1.mod @@ -1,5 +1,5 @@ // Example 1 from Collard's guide to Dynare -var y, c, k, a, h, b; +var y, k, a, h, b; varexo e, u; verbatim; @@ -22,6 +22,7 @@ theta = 2.95; phi = 0.1; model; +[endogenous='c',name='law of motion of capital'] c*theta*h^(1+psi)=(1-alpha)*y; k = beta*(((exp(b)*c)/(exp(b(+1))*c(+1))) *(exp(b(+1))*alpha*y(+1)+(1-delta)*k));