trunk preprocessor: allow arbitrary expressions (and not just constants) in estimated_params, estimated_params_init and estimated_params_bounds blocks
git-svn-id: https://www.dynare.org/svn/dynare/trunk@2368 ac1d8469-bf42-47a9-8791-bf33cf982152issue#70
parent
11f99f72a6
commit
9d0d9f0f83
|
@ -409,47 +409,62 @@ EstimatedParamsStatement::EstimatedParamsStatement(const vector<EstimationParams
|
|||
void
|
||||
EstimatedParamsStatement::writeOutput(ostream &output, const string &basename) const
|
||||
{
|
||||
output << "global estim_params_\n";
|
||||
output << "var_list_ = [];\n";
|
||||
output << "estim_params_.var_exo = [];\n";
|
||||
output << "estim_params_.var_endo = [];\n";
|
||||
output << "estim_params_.corrx = [];\n";
|
||||
output << "estim_params_.corrn = [];\n";
|
||||
output << "estim_params_.param_names = [];\n";
|
||||
output << "estim_params_.user_param_names = [];\n";
|
||||
output << "estim_params_.param_vals = [];\n";
|
||||
output << "M_.H = 0;\n";
|
||||
output << "global estim_params_" << endl
|
||||
<< "estim_params_.var_exo = [];" << endl
|
||||
<< "estim_params_.var_endo = [];" << endl
|
||||
<< "estim_params_.corrx = [];" << endl
|
||||
<< "estim_params_.corrn = [];" << endl
|
||||
<< "estim_params_.param_names = [];" << endl
|
||||
<< "estim_params_.user_param_names = [];" << endl
|
||||
<< "estim_params_.param_vals = [];" << endl
|
||||
<< "M_.H = 0;" << endl;
|
||||
|
||||
vector<EstimationParams>::const_iterator it;
|
||||
|
||||
for(it = estim_params_list.begin(); it != estim_params_list.end(); it++)
|
||||
{
|
||||
int symb_id = symbol_table.getID(it->name) + 1;
|
||||
SymbolType symb_type = symbol_table.getType(it->name);
|
||||
|
||||
switch(it->type)
|
||||
{
|
||||
case 1:
|
||||
if (symbol_table.getType(it->name) == eExogenous)
|
||||
if (symb_type == eExogenous)
|
||||
output << "estim_params_.var_exo = [estim_params_.var_exo; ";
|
||||
else if (symbol_table.getType(it->name) == eEndogenous)
|
||||
else if (symb_type == eEndogenous)
|
||||
output << "estim_params_.var_endo = [estim_params_.var_endo; ";
|
||||
output << symbol_table.getID(it->name)+1;
|
||||
output << symb_id;
|
||||
break;
|
||||
case 2:
|
||||
output << "estim_params_.param_vals = [estim_params_.param_vals; ";
|
||||
output << symbol_table.getID(it->name)+1;
|
||||
output << "estim_params_.param_vals = [estim_params_.param_vals; "
|
||||
<< symb_id;
|
||||
break;
|
||||
case 3:
|
||||
if (symbol_table.getType(it->name) == eExogenous)
|
||||
if (symb_type == eExogenous)
|
||||
output << "estim_params_.corrx = [estim_params_.corrx; ";
|
||||
else if (symbol_table.getType(it->name) == eEndogenous)
|
||||
else if (symb_type == eEndogenous)
|
||||
output << "estim_params_.corrn = [estim_params_.corrn; ";
|
||||
output << symbol_table.getID(it->name)+1;
|
||||
output << " " << symbol_table.getID(it->name2)+1;
|
||||
output << symb_id << " " << symbol_table.getID(it->name2)+1;
|
||||
break;
|
||||
}
|
||||
output << " " << it->init_val << " " << it->low_bound
|
||||
<< " " << it->up_bound << " " << it->prior
|
||||
<< " " << it->mean << " " << it->std
|
||||
<< " " << it->p3 << " " << it->p4 << " " << it->jscale << "];\n";
|
||||
output << ", ";
|
||||
it->init_val->writeOutput(output);
|
||||
output << ", ";
|
||||
it->low_bound->writeOutput(output);
|
||||
output << ", ";
|
||||
it->up_bound->writeOutput(output);
|
||||
output << ", "
|
||||
<< it->prior << ", ";
|
||||
it->mean->writeOutput(output);
|
||||
output << ", ";
|
||||
it->std->writeOutput(output);
|
||||
output << ", ";
|
||||
it->p3->writeOutput(output);
|
||||
output << ", ";
|
||||
it->p4->writeOutput(output);
|
||||
output << ", ";
|
||||
it->jscale->writeOutput(output);
|
||||
output << " ];" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -467,35 +482,48 @@ EstimatedParamsInitStatement::writeOutput(ostream &output, const string &basenam
|
|||
|
||||
for(it = estim_params_list.begin(); it != estim_params_list.end(); it++)
|
||||
{
|
||||
int symb_id = symbol_table.getID(it->name) + 1;
|
||||
SymbolType symb_type = symbol_table.getType(it->name);
|
||||
|
||||
if (it->type < 3)
|
||||
{
|
||||
if (symbol_table.getType(it->name) == eExogenous)
|
||||
if (symb_type == eExogenous)
|
||||
{
|
||||
output << "tmp1 = find(estim_params_.var_exo(:,1)==" << symbol_table.getID(it->name)+1 << ");\n";
|
||||
output << "estim_params_.var_exo(tmp1,2) = " << it->init_val << ";\n";
|
||||
output << "tmp1 = find(estim_params_.var_exo(:,1)==" << symb_id << ");" << endl;
|
||||
output << "estim_params_.var_exo(tmp1,2) = ";
|
||||
it->init_val->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
else if (symbol_table.getType(it->name) == eEndogenous)
|
||||
else if (symb_type == eEndogenous)
|
||||
{
|
||||
output << "tmp1 = find(estim_params_.var_endo(:,1)==" << symbol_table.getID(it->name)+1 << ");\n";
|
||||
output << "estim_params_.var_endo(tmp1,2) = " << it->init_val << ";\n";
|
||||
output << "tmp1 = find(estim_params_.var_endo(:,1)==" << symb_id << ");" << endl;
|
||||
output << "estim_params_.var_endo(tmp1,2) = ";
|
||||
it->init_val->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
else if (symbol_table.getType(it->name) == eParameter)
|
||||
else if (symb_type == eParameter)
|
||||
{
|
||||
output << "tmp1 = find(estim_params_.param_vals(:,1)==" << symbol_table.getID(it->name)+1 << ");\n";
|
||||
output << "estim_params_.param_vals(tmp1,2) = " << it->init_val << ";\n";
|
||||
output << "tmp1 = find(estim_params_.param_vals(:,1)==" << symb_id << ");" << endl;
|
||||
output << "estim_params_.param_vals(tmp1,2) = ";
|
||||
it->init_val->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (symbol_table.getType(it->name) == eExogenous)
|
||||
if (symb_type == eExogenous)
|
||||
{
|
||||
output << "tmp1 = find((estim_params_.corrx(:,1)==" << symbol_table.getID(it->name)+1 << ")) & (estim_params_.corrx(:,2)==" << symbol_table.getID(it->name2)+1 << ");\n";
|
||||
output << "estim_params_.corrx(tmp1,3) = " << it->init_val << ";\n";
|
||||
output << "tmp1 = find((estim_params_.corrx(:,1)==" << symb_id << ")) & (estim_params_.corrx(:,2)==" << symbol_table.getID(it->name2)+1 << ");" << endl;
|
||||
output << "estim_params_.corrx(tmp1,3) = ";
|
||||
it->init_val->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
else if (symbol_table.getType(it->name) == eEndogenous)
|
||||
else if (symb_type == eEndogenous)
|
||||
{
|
||||
output << "tmp1 = find((estim_params_.corrn(:,1)==" << symbol_table.getID(it->name)+1 << ")) & (estim_params_.corrn(:,2)==" << symbol_table.getID(it->name2)+1 << ";\n";
|
||||
output << "estim_params_.corrn(tmp1,3) = " << it->init_val << ";\n";
|
||||
output << "tmp1 = find((estim_params_.corrn(:,1)==" << symb_id << ")) & (estim_params_.corrn(:,2)==" << symbol_table.getID(it->name2)+1 << ";" << endl;
|
||||
output << "estim_params_.corrn(tmp1,3) = ";
|
||||
it->init_val->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -515,40 +543,73 @@ EstimatedParamsBoundsStatement::writeOutput(ostream &output, const string &basen
|
|||
|
||||
for(it = estim_params_list.begin(); it != estim_params_list.end(); it++)
|
||||
{
|
||||
int symb_id = symbol_table.getID(it->name) + 1;
|
||||
SymbolType symb_type = symbol_table.getType(it->name);
|
||||
|
||||
if (it->type < 3)
|
||||
{
|
||||
if (symbol_table.getType(it->name) == eExogenous)
|
||||
if (symb_type == eExogenous)
|
||||
{
|
||||
output << "tmp1 = find(estim_params_.var_exo(:,1)==" << symbol_table.getID(it->name)+1 << ");\n";
|
||||
output << "estim_params_.var_exo(tmp1,3) = " << it->low_bound << ";\n";
|
||||
output << "estim_params_.var_exo(tmp1,4) = " << it->up_bound << ";\n";
|
||||
output << "tmp1 = find(estim_params_.var_exo(:,1)==" << symb_id << ");" << endl;
|
||||
|
||||
output << "estim_params_.var_exo(tmp1,3) = ";
|
||||
it->low_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
|
||||
output << "estim_params_.var_exo(tmp1,4) = ";
|
||||
it->up_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
else if (symbol_table.getType(it->name) == eEndogenous)
|
||||
else if (symb_type == eEndogenous)
|
||||
{
|
||||
output << "tmp1 = find(estim_params_.var_endo(:,1)==" << symbol_table.getID(it->name)+1 << ");\n";
|
||||
output << "estim_params_.var_endo(tmp1,3) = " << it->low_bound << ";\n";
|
||||
output << "estim_params_.var_endo(tmp1,4) = " << it->up_bound << ";\n";
|
||||
output << "tmp1 = find(estim_params_.var_endo(:,1)==" << symb_id << ");" << endl;
|
||||
|
||||
output << "estim_params_.var_endo(tmp1,3) = ";
|
||||
it->low_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
|
||||
output << "estim_params_.var_endo(tmp1,4) = ";
|
||||
it->up_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
else if (symbol_table.getType(it->name) == eParameter)
|
||||
else if (symb_type == eParameter)
|
||||
{
|
||||
output << "tmp1 = find(estim_params_.param_vals(:,1)==" << symbol_table.getID(it->name)+1 << ");\n";
|
||||
output << "estim_params_.param_vals(tmp1,3) = " << it->low_bound << ";\n";
|
||||
output << "estim_params_.param_vals(tmp1,4) = " << it->up_bound << ";\n";
|
||||
output << "tmp1 = find(estim_params_.param_vals(:,1)==" << symb_id << ");" << endl;
|
||||
|
||||
output << "estim_params_.param_vals(tmp1,3) = ";
|
||||
it->low_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
|
||||
output << "estim_params_.param_vals(tmp1,4) = ";
|
||||
it->up_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (symbol_table.getType(it->name) == eExogenous)
|
||||
if (symb_type == eExogenous)
|
||||
{
|
||||
output << "tmp1 = find((estim_params_.corrx(:,1)==" << symbol_table.getID(it->name)+1 << ")) & (estim_params_.corrx(:,2)==" << symbol_table.getID(it->name2)+1 << ");\n";
|
||||
output << "estim_params_.corrx(tmp1,4) = " << it->low_bound << ";\n";
|
||||
output << "estim_params_.corrx(tmp1,5) = " << it->up_bound << ";\n";
|
||||
output << "tmp1 = find((estim_params_.corrx(:,1)==" << symb_id << ")) & (estim_params_.corrx(:,2)==" << symbol_table.getID(it->name2)+1 << ");" << endl;
|
||||
|
||||
output << "estim_params_.corrx(tmp1,4) = ";
|
||||
it->low_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
|
||||
output << "estim_params_.corrx(tmp1,5) = ";
|
||||
it->up_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
else if (symbol_table.getType(it->name) == eEndogenous)
|
||||
else if (symb_type == eEndogenous)
|
||||
{
|
||||
output << "tmp1 = find((estim_params_.corrn(:,1)==" << symbol_table.getID(it->name)+1 << ")) & (estim_params_.corrn(:,2)==" << symbol_table.getID(it->name2)+1 << ";\n";
|
||||
output << "estim_params_.corrn(tmp1,4) = " << it->low_bound << ";\n";
|
||||
output << "estim_params_.corrn(tmp1,5) = " << it->up_bound << ";\n";
|
||||
output << "tmp1 = find((estim_params_.corrn(:,1)==" << symb_id << ")) & (estim_params_.corrn(:,2)==" << symbol_table.getID(it->name2)+1 << ";" << endl;
|
||||
|
||||
output << "estim_params_.corrn(tmp1,4) = ";
|
||||
it->low_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
|
||||
output << "estim_params_.corrn(tmp1,5) = ";
|
||||
it->up_bound->writeOutput(output);
|
||||
output << ";" << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2008 Dynare Team
|
||||
* Copyright (C) 2003-2009 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -32,6 +32,10 @@ DataTree::DataTree(SymbolTable &symbol_table_arg, NumericalConstants &num_consta
|
|||
One = AddNumConstant("1");
|
||||
|
||||
MinusOne = AddUMinus(One);
|
||||
|
||||
NaN = AddNumConstant("NaN");
|
||||
Infinity = AddNumConstant("Inf");
|
||||
MinusInfinity = AddUMinus(Infinity);
|
||||
}
|
||||
|
||||
DataTree::~DataTree()
|
||||
|
|
131
DynareBison.yy
131
DynareBison.yy
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2008 Dynare Team
|
||||
* Copyright (C) 2003-2009 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -92,7 +92,7 @@ class ParsingDriver;
|
|||
%token FORECAST
|
||||
%token GAMMA_PDF GAUSSIAN_ELIMINATION GMRES GRAPH
|
||||
%token HISTVAL HP_FILTER HP_NGRID
|
||||
%token INITVAL INITVAL_FILE
|
||||
%token INF_CONSTANT INITVAL INITVAL_FILE
|
||||
%token <string_val> INT_NUMBER
|
||||
%token INV_GAMMA1_PDF INV_GAMMA2_PDF IRF
|
||||
%token KALMAN_ALGO KALMAN_TOL
|
||||
|
@ -102,7 +102,7 @@ class ParsingDriver;
|
|||
%token MODE_CHECK MODE_COMPUTE MODE_FILE MODEL MODEL_COMPARISON MODEL_INFO MSHOCKS
|
||||
%token MODIFIEDHARMONICMEAN MOMENTS_VARENDO DIFFUSE_FILTER
|
||||
%token <string_val> NAME
|
||||
%token NOBS NOCONSTANT NOCORR NODIAGNOSTIC NOFUNCTIONS
|
||||
%token NAN_CONSTANT NOBS NOCONSTANT NOCORR NODIAGNOSTIC NOFUNCTIONS
|
||||
%token NOGRAPH NOMOMENTS NOPRINT NORMAL_PDF
|
||||
%token OBSERVATION_TRENDS OPTIM OPTIM_WEIGHTS ORDER OSR OSR_PARAMS
|
||||
%token PARAMETERS PERIODS PLANNER_OBJECTIVE PREFILTER PRESAMPLE
|
||||
|
@ -364,6 +364,10 @@ expression : '(' expression ')'
|
|||
{ $$ = driver.add_normcdf($3, $5, $7); }
|
||||
| NORMCDF '(' expression ')'
|
||||
{ $$ = driver.add_normcdf($3); }
|
||||
| NAN_CONSTANT
|
||||
{ $$ = driver.add_nan_constant(); }
|
||||
| INF_CONSTANT
|
||||
{ $$ = driver.add_inf_constant(); }
|
||||
;
|
||||
|
||||
comma_expression : expression
|
||||
|
@ -734,79 +738,57 @@ estimated_elem2 : prior COMMA estimated_elem3
|
|||
driver.estim_params.prior = *$1;
|
||||
delete $1;
|
||||
}
|
||||
| value COMMA prior COMMA estimated_elem3
|
||||
| expression COMMA prior COMMA estimated_elem3
|
||||
{
|
||||
driver.estim_params.init_val = *$1;
|
||||
driver.estim_params.init_val = $1;
|
||||
driver.estim_params.prior = *$3;
|
||||
delete $1;
|
||||
delete $3;
|
||||
}
|
||||
| value COMMA value COMMA value COMMA prior COMMA estimated_elem3
|
||||
| expression COMMA expression COMMA expression COMMA prior COMMA estimated_elem3
|
||||
{
|
||||
driver.estim_params.init_val = *$1;
|
||||
driver.estim_params.low_bound = *$3;
|
||||
driver.estim_params.up_bound = *$5;
|
||||
driver.estim_params.init_val = $1;
|
||||
driver.estim_params.low_bound = $3;
|
||||
driver.estim_params.up_bound = $5;
|
||||
driver.estim_params.prior = *$7;
|
||||
delete $1;
|
||||
delete $3;
|
||||
delete $5;
|
||||
delete $7;
|
||||
}
|
||||
| value
|
||||
| expression
|
||||
{
|
||||
driver.estim_params.init_val = *$1;
|
||||
delete $1;
|
||||
driver.estim_params.init_val = $1;
|
||||
}
|
||||
| value COMMA value COMMA value
|
||||
| expression COMMA expression COMMA expression
|
||||
{
|
||||
driver.estim_params.init_val = *$1;
|
||||
driver.estim_params.low_bound = *$3;
|
||||
driver.estim_params.up_bound = *$5;
|
||||
delete $1;
|
||||
delete $3;
|
||||
delete $5;
|
||||
driver.estim_params.init_val = $1;
|
||||
driver.estim_params.low_bound = $3;
|
||||
driver.estim_params.up_bound = $5;
|
||||
}
|
||||
;
|
||||
|
||||
estimated_elem3 : value COMMA value
|
||||
estimated_elem3 : expression COMMA expression
|
||||
{
|
||||
driver.estim_params.mean = *$1;
|
||||
driver.estim_params.std = *$3;
|
||||
delete $1;
|
||||
delete $3;
|
||||
driver.estim_params.mean = $1;
|
||||
driver.estim_params.std = $3;
|
||||
}
|
||||
| value COMMA value COMMA value
|
||||
| expression COMMA expression COMMA expression
|
||||
{
|
||||
driver.estim_params.mean = *$1;
|
||||
driver.estim_params.std = *$3;
|
||||
driver.estim_params.p3 = *$5;
|
||||
delete $1;
|
||||
delete $3;
|
||||
delete $5;
|
||||
driver.estim_params.mean = $1;
|
||||
driver.estim_params.std = $3;
|
||||
driver.estim_params.p3 = $5;
|
||||
}
|
||||
| value COMMA value COMMA value COMMA value
|
||||
| expression COMMA expression COMMA expression COMMA expression
|
||||
{
|
||||
driver.estim_params.mean = *$1;
|
||||
driver.estim_params.std = *$3;
|
||||
driver.estim_params.p3 = *$5;
|
||||
driver.estim_params.p4 = *$7;
|
||||
delete $1;
|
||||
delete $3;
|
||||
delete $5;
|
||||
delete $7;
|
||||
driver.estim_params.mean = $1;
|
||||
driver.estim_params.std = $3;
|
||||
driver.estim_params.p3 = $5;
|
||||
driver.estim_params.p4 = $7;
|
||||
}
|
||||
| value COMMA value COMMA value COMMA value COMMA value
|
||||
| expression COMMA expression COMMA expression COMMA expression COMMA expression
|
||||
{
|
||||
driver.estim_params.mean = *$1;
|
||||
driver.estim_params.std = *$3;
|
||||
driver.estim_params.p3 = *$5;
|
||||
driver.estim_params.p4 = *$7;
|
||||
driver.estim_params.jscale = *$9;
|
||||
delete $1;
|
||||
delete $3;
|
||||
delete $5;
|
||||
delete $7;
|
||||
delete $9;
|
||||
driver.estim_params.mean = $1;
|
||||
driver.estim_params.std = $3;
|
||||
driver.estim_params.p3 = $5;
|
||||
driver.estim_params.p4 = $7;
|
||||
driver.estim_params.jscale = $9;
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -819,31 +801,28 @@ estimated_init_list : estimated_init_list estimated_init_elem
|
|||
{ driver.add_estimated_params_element(); }
|
||||
;
|
||||
|
||||
estimated_init_elem : STDERR NAME COMMA value ';'
|
||||
estimated_init_elem : STDERR NAME COMMA expression ';'
|
||||
{
|
||||
driver.estim_params.type = 1;
|
||||
driver.estim_params.name = *$2;
|
||||
driver.estim_params.init_val = *$4;
|
||||
driver.estim_params.init_val = $4;
|
||||
delete $2;
|
||||
delete $4;
|
||||
}
|
||||
| CORR NAME COMMA NAME COMMA value ';'
|
||||
| CORR NAME COMMA NAME COMMA expression ';'
|
||||
{
|
||||
driver.estim_params.type = 3;
|
||||
driver.estim_params.name = *$2;
|
||||
driver.estim_params.name2 = *$4;
|
||||
driver.estim_params.init_val = *$6;
|
||||
driver.estim_params.init_val = $6;
|
||||
delete $2;
|
||||
delete $4;
|
||||
delete $6;
|
||||
}
|
||||
| NAME COMMA value ';'
|
||||
| NAME COMMA expression ';'
|
||||
{
|
||||
driver.estim_params.type = 2;
|
||||
driver.estim_params.name = *$1;
|
||||
driver.estim_params.init_val = *$3;
|
||||
driver.estim_params.init_val = $3;
|
||||
delete $1;
|
||||
delete $3;
|
||||
}
|
||||
;
|
||||
|
||||
|
@ -856,37 +835,31 @@ estimated_bounds_list : estimated_bounds_list estimated_bounds_elem
|
|||
{ driver.add_estimated_params_element(); }
|
||||
;
|
||||
|
||||
estimated_bounds_elem : STDERR NAME COMMA value COMMA value ';'
|
||||
estimated_bounds_elem : STDERR NAME COMMA expression COMMA expression ';'
|
||||
{
|
||||
driver.estim_params.type = 1;
|
||||
driver.estim_params.name = *$2;
|
||||
driver.estim_params.low_bound = *$4;
|
||||
driver.estim_params.up_bound = *$6;
|
||||
driver.estim_params.low_bound = $4;
|
||||
driver.estim_params.up_bound = $6;
|
||||
delete $2;
|
||||
delete $4;
|
||||
delete $6;
|
||||
}
|
||||
| CORR NAME COMMA NAME COMMA value COMMA value ';'
|
||||
| CORR NAME COMMA NAME COMMA expression COMMA expression ';'
|
||||
{
|
||||
driver.estim_params.type = 3;
|
||||
driver.estim_params.name = *$2;
|
||||
driver.estim_params.name2 = *$4;
|
||||
driver.estim_params.low_bound = *$6;
|
||||
driver.estim_params.up_bound = *$8;
|
||||
driver.estim_params.low_bound = $6;
|
||||
driver.estim_params.up_bound = $8;
|
||||
delete $2;
|
||||
delete $4;
|
||||
delete $6;
|
||||
delete $8;
|
||||
}
|
||||
| NAME COMMA value COMMA value ';'
|
||||
| NAME COMMA expression COMMA expression ';'
|
||||
{
|
||||
driver.estim_params.type = 2;
|
||||
driver.estim_params.name = *$1;
|
||||
driver.estim_params.low_bound = *$3;
|
||||
driver.estim_params.up_bound = *$5;
|
||||
driver.estim_params.low_bound = $3;
|
||||
driver.estim_params.up_bound = $5;
|
||||
delete $1;
|
||||
delete $3;
|
||||
delete $5;
|
||||
}
|
||||
;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2008 Dynare Team
|
||||
* Copyright (C) 2003-2009 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -329,6 +329,8 @@ int sigma_e = 0;
|
|||
<DYNARE_STATEMENT,DYNARE_BLOCK>max {return token::MAX;}
|
||||
<DYNARE_STATEMENT,DYNARE_BLOCK>min {return token::MIN;}
|
||||
<DYNARE_STATEMENT,DYNARE_BLOCK>normcdf {return token::NORMCDF;}
|
||||
<DYNARE_STATEMENT,DYNARE_BLOCK>nan {return token::NAN_CONSTANT;}
|
||||
<DYNARE_STATEMENT,DYNARE_BLOCK>inf {return token::INF_CONSTANT;}
|
||||
|
||||
/* options for GSA module by Marco Ratto */
|
||||
<DYNARE_STATEMENT>identification {return token::IDENTIFICATION;}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2008 Dynare Team
|
||||
* Copyright (C) 2003-2009 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -22,12 +22,6 @@
|
|||
|
||||
#include "NumericalConstants.hh"
|
||||
|
||||
NumericalConstants::NumericalConstants()
|
||||
{
|
||||
AddConstant("0");
|
||||
AddConstant("1");
|
||||
}
|
||||
|
||||
int
|
||||
NumericalConstants::AddConstant(const string &iConst)
|
||||
{
|
||||
|
|
|
@ -61,6 +61,7 @@ ParsingDriver::parse(istream &in, bool debug)
|
|||
symbol_list.clear();
|
||||
|
||||
reset_data_tree();
|
||||
estim_params.init(*data_tree);
|
||||
|
||||
lexer = new DynareFlex(&in);
|
||||
lexer->set_debug(debug);
|
||||
|
@ -150,6 +151,18 @@ ParsingDriver::add_constant(string *constant)
|
|||
return id;
|
||||
}
|
||||
|
||||
NodeID
|
||||
ParsingDriver::add_nan_constant()
|
||||
{
|
||||
return data_tree->NaN;
|
||||
}
|
||||
|
||||
NodeID
|
||||
ParsingDriver::add_inf_constant()
|
||||
{
|
||||
return data_tree->Infinity;
|
||||
}
|
||||
|
||||
NodeID
|
||||
ParsingDriver::add_model_variable(string *name)
|
||||
{
|
||||
|
@ -741,7 +754,7 @@ ParsingDriver::add_estimated_params_element()
|
|||
check_symbol_existence(estim_params.name2);
|
||||
|
||||
estim_params_list.push_back(estim_params);
|
||||
estim_params.clear();
|
||||
estim_params.init(*data_tree);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2008 Dynare Team
|
||||
* Copyright (C) 2003-2009 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -321,43 +321,28 @@ public:
|
|||
virtual void writeOutput(ostream &output, const string &basename) const;
|
||||
};
|
||||
|
||||
/*!
|
||||
\class EstimationParams
|
||||
\brief EstimationParams
|
||||
*/
|
||||
struct EstimationParams
|
||||
//! Temporary structure used when parsing estimation_params* statements
|
||||
class EstimationParams
|
||||
{
|
||||
public:
|
||||
int type;
|
||||
std::string name;
|
||||
std::string name2;
|
||||
std::string init_val;
|
||||
std::string prior;
|
||||
std::string low_bound;
|
||||
std::string up_bound;
|
||||
std::string mean;
|
||||
std::string std;
|
||||
std::string p3;
|
||||
std::string p4;
|
||||
std::string jscale;
|
||||
string name, name2, prior;
|
||||
NodeID init_val, low_bound, up_bound, mean, std, p3, p4, jscale;
|
||||
|
||||
EstimationParams()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
void clear()
|
||||
void init(const DataTree &datatree)
|
||||
{
|
||||
type = 0;
|
||||
name = "";
|
||||
name2 = "";
|
||||
init_val = "NaN";
|
||||
prior = "NaN";
|
||||
low_bound = "-Inf";
|
||||
up_bound = "Inf";
|
||||
mean = "NaN";
|
||||
std = "NaN";
|
||||
p3 = "NaN";
|
||||
p4 = "NaN";
|
||||
jscale = "NaN";
|
||||
init_val = datatree.NaN;
|
||||
low_bound = datatree.MinusInfinity;
|
||||
up_bound = datatree.Infinity;
|
||||
mean = datatree.NaN;
|
||||
std = datatree.NaN;
|
||||
p3 = datatree.NaN;
|
||||
p4 = datatree.NaN;
|
||||
jscale = datatree.NaN;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2008 Dynare Team
|
||||
* Copyright (C) 2003-2009 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -78,7 +78,7 @@ public:
|
|||
virtual ~DataTree();
|
||||
//! The variable table
|
||||
VariableTable variable_table;
|
||||
NodeID Zero, One, MinusOne;
|
||||
NodeID Zero, One, MinusOne, NaN, Infinity, MinusInfinity;
|
||||
//! Stores local variables value
|
||||
map<int, NodeID> local_variables_table;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2008 Dynare Team
|
||||
* Copyright (C) 2003-2009 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -35,7 +35,6 @@ private:
|
|||
//! Map matching constants to their id
|
||||
map<string, int> numConstantsIndex;
|
||||
public:
|
||||
NumericalConstants();
|
||||
//! Adds a constant and returns its ID
|
||||
int AddConstant(const string &iConst);
|
||||
//! Get a constant in string form
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2008 Dynare Team
|
||||
* Copyright (C) 2003-2009 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -179,6 +179,10 @@ public:
|
|||
void declare_and_init_model_local_variable(string *name, NodeID rhs);
|
||||
//! Adds a constant to DataTree
|
||||
NodeID add_constant(string *constant);
|
||||
//! Adds a NaN constant to DataTree
|
||||
NodeID add_nan_constant();
|
||||
//! Adds an Inf constant to DataTree
|
||||
NodeID add_inf_constant();
|
||||
//! Adds a model variable to ModelTree and VariableTable
|
||||
NodeID add_model_variable(string *name);
|
||||
//! Adds a model lagged variable to ModelTree and VariableTable
|
||||
|
|
Loading…
Reference in New Issue