!switch
Switch among several cases based on expression.
Syntax with an otherwise clause
!switch Expr
!case Balue1
Block1
!case Balue2
Block2
...
!otherwise
OtherwiseBlock
!end
Syntax without an otherwise clause
!switch Expr
!case Value1
Block1
!case Value2
Block2
...
!end
Description
The !switch...!case...!otherwise...!end
command works the same way as
its counterpart in the Matlab programming language.
Use the !switch...!case...!end
command to create a larger number of
branches of the model code. Which block of code is actually read in and
which blocks are discarded depends on which value in the !case
clauses
matches the value of the !switch
expression. This works exactly as the
switch...case...end
command in Matlab. The expression after the !switch
part of the command must must be a valid Matlab expression, and can refer
to the model parameters, or to other fields included in the parameter
database passed in when you run the model
function;
see the option 'assign='
.
If the expression fails to be matched by any value in the !case
clauses, the branch in the !otherwise
clause is used. If it is a
!switch
command without the !otherwise
clause, the whole command is
discarded. The Matlab function isequal
is used to match the !switch
expression with the !case
values.
Example
!switch policy_regime
!case 'IT'
r = rho*r{-1} + (1-rho)*kappa*pie{4} + epsilon;
!case 'Managed_exchange_rate'
s = s{-1} + epsilon;
!case 'Constant_money_growth'
m-m{-1} = m{-1}-m{-2} + epsilon;
!end
When reading the model file in, create a parameter database, include at
least a field named policy_regime
in it, and use the option 'assign='
to pass the database in. Note that you do not need to declare
policy_regime
as a parameter in the model file.
P = struct( );
P.policy_regime = 'Managed_exchange_rate';
...
m = model('my.model','assign',P);
In this case, the managed exchange rate policy rule, s = s{-1} +
epsilon;
is read in and the rest of the !switch
command is discarded.
To use another branch of the !switch
command you need to re-read the
model file again with a different value assigned to the policy_regime
field of the input database.