Expressions¶
This page collects the expression sub-language: the operators,
functions, and literals that may appear on the right of an equation, in
a parameter assignment, in an initval, in a steady-state assignment
or in a shock path. The same grammar applies everywhere; the only
context-dependent restrictions are noted below.
Literals¶
42,3.14,1.5e-3Decimal literals (integer, fractional, optional exponent).
'hello'or"hello"String literals. Only meaningful as equation tags and similar metadata; using one in a numeric position raises a
CodegenError.{key1: expr, key2: expr}or{}Dict literals. Used only as the value of the
e=keyword ininitval(steady, e={…})andsteady_state(v, e={…}); using one in a numeric position raises aCodegenError.
Identifiers¶
Any declared name resolves to its value at the point of evaluation:
a
parameterresolves to its assigned value;a
var(endogenous) resolves to its current state on the grid;a
varexoresolves to the value at the current time of the active shock path;the reserved
tresolves to the current time.
Arithmetic operators¶
Operator |
Meaning |
|---|---|
|
Addition |
|
Subtraction / unary minus |
|
Multiplication |
|
Division |
|
Power (right-associative) |
Precedence (low → high): + -, * /, unary -, ^. Use
parentheses for any clarification.
Comparison and logical operators¶
Comparisons return 0 or 1 (as in Dynare):
<,<=— less-than, less-or-equal;>,>=— greater-than, greater-or-equal;==— equal;!=— not equal.
Logical operators on these 0/1 values:
&&— logical AND;||— logical OR;!— logical NOT.
Comparisons are non-chainable (a < b < c is a syntax error;
write a < b && b < c).
Mathematical functions¶
The functions below are available in every block that accepts expressions:
exponentials and logs:
exp,ln(aliaslog),log10,sqrt;trigonometric and hyperbolic:
sin,cos,tan,asin,acos,atan,sinh,cosh,tanh;error function:
erf;pointwise:
abs,sign;variadic:
min(a, b, …),max(a, b, …)(at least two arguments).
The conditional if(condition, then, else) (with the 1-argument sugar
if(cond, x) ≡ if(cond, x, 0)) is allowed everywhere.
Note
min and max are useful for occasionally-binding constraints
such as the ZLB (i = max(0, …)). Newton may have trouble at the
kink for some calibrations; if convergence fails, raise N or
use a smooth approximation like 0.5*(z + sqrt(z*z + eps)) in
place of max(0, z).
Context-specific extras¶
The shock-shape helpers (step, pulse, ramp, bump,
expdecay, smoothstep) are available only inside ``shocks``
paths and are rejected in model equations. See The shocks block.
The time derivative diff(x) is allowed only inside the
model block (and as a left-hand side in initval).
The steady-state callable steady_state(var) and
steady_state(var, e={…}) is allowed only inside the initval
block; see Initial conditions: initval and initial_guess.
Comments¶
//introduces a line comment,/* … */a block comment. Comments are ignored by the parser.