preprocessor: params_derivs_file: by default, compute second order derivs wrt params; simplify code; #1187
parent
c3dcc0e121
commit
9202c1e6c2
18
ModFile.cc
18
ModFile.cc
|
@ -490,10 +490,11 @@ ModFile::computingPass(bool no_tmp_terms, FileOutputType output, bool compute_xr
|
||||||
const bool static_hessian = mod_file_struct.identification_present
|
const bool static_hessian = mod_file_struct.identification_present
|
||||||
|| mod_file_struct.estimation_analytic_derivation;
|
|| mod_file_struct.estimation_analytic_derivation;
|
||||||
FileOutputType paramsDerivatives = none;
|
FileOutputType paramsDerivatives = none;
|
||||||
if (mod_file_struct.estimation_analytic_derivation)
|
if (mod_file_struct.identification_present || mod_file_struct.estimation_analytic_derivation)
|
||||||
paramsDerivatives = third;
|
if (!sec_order_param_deriv)
|
||||||
if (mod_file_struct.identification_present || !sec_order_param_deriv)
|
paramsDerivatives = first;
|
||||||
paramsDerivatives = first;
|
else
|
||||||
|
paramsDerivatives = second;
|
||||||
static_model.computingPass(global_eval_context, no_tmp_terms, static_hessian,
|
static_model.computingPass(global_eval_context, no_tmp_terms, static_hessian,
|
||||||
false, paramsDerivatives, block, byte_code);
|
false, paramsDerivatives, block, byte_code);
|
||||||
}
|
}
|
||||||
|
@ -527,10 +528,11 @@ ModFile::computingPass(bool no_tmp_terms, FileOutputType output, bool compute_xr
|
||||||
|| mod_file_struct.estimation_analytic_derivation
|
|| mod_file_struct.estimation_analytic_derivation
|
||||||
|| output == third;
|
|| output == third;
|
||||||
FileOutputType paramsDerivatives = none;
|
FileOutputType paramsDerivatives = none;
|
||||||
if (mod_file_struct.estimation_analytic_derivation)
|
if (mod_file_struct.identification_present || mod_file_struct.estimation_analytic_derivation)
|
||||||
paramsDerivatives = third;
|
if (!sec_order_param_deriv)
|
||||||
if (mod_file_struct.identification_present || !sec_order_param_deriv)
|
paramsDerivatives = first;
|
||||||
paramsDerivatives = first;
|
else
|
||||||
|
paramsDerivatives = second;
|
||||||
dynamic_model.computingPass(true, hessian, thirdDerivatives, paramsDerivatives, global_eval_context, no_tmp_terms, block, use_dll, byte_code, compute_xrefs);
|
dynamic_model.computingPass(true, hessian, thirdDerivatives, paramsDerivatives, global_eval_context, no_tmp_terms, block, use_dll, byte_code, compute_xrefs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
57
ModelTree.cc
57
ModelTree.cc
|
@ -1659,7 +1659,7 @@ ModelTree::sparseHelper(int order, ostream &output, int row_nb, int col_nb, Expr
|
||||||
void
|
void
|
||||||
ModelTree::computeParamsDerivatives(FileOutputType paramsDerivatives)
|
ModelTree::computeParamsDerivatives(FileOutputType paramsDerivatives)
|
||||||
{
|
{
|
||||||
if (!(paramsDerivatives == first || paramsDerivatives == second || paramsDerivatives == third))
|
if (!(paramsDerivatives == first || paramsDerivatives == second))
|
||||||
return;
|
return;
|
||||||
set<int> deriv_id_set;
|
set<int> deriv_id_set;
|
||||||
addAllParamDerivId(deriv_id_set);
|
addAllParamDerivId(deriv_id_set);
|
||||||
|
@ -1677,7 +1677,7 @@ ModelTree::computeParamsDerivatives(FileOutputType paramsDerivatives)
|
||||||
residuals_params_derivatives[make_pair(eq, param)] = d1;
|
residuals_params_derivatives[make_pair(eq, param)] = d1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (paramsDerivatives == second || paramsDerivatives == third)
|
if (paramsDerivatives == second)
|
||||||
for (first_derivatives_t::const_iterator it2 = residuals_params_derivatives.begin();
|
for (first_derivatives_t::const_iterator it2 = residuals_params_derivatives.begin();
|
||||||
it2 != residuals_params_derivatives.end(); it2++)
|
it2 != residuals_params_derivatives.end(); it2++)
|
||||||
{
|
{
|
||||||
|
@ -1704,35 +1704,36 @@ ModelTree::computeParamsDerivatives(FileOutputType paramsDerivatives)
|
||||||
jacobian_params_derivatives[make_pair(eq, make_pair(var, param))] = d2;
|
jacobian_params_derivatives[make_pair(eq, make_pair(var, param))] = d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (paramsDerivatives == second || paramsDerivatives == third)
|
if (paramsDerivatives == second)
|
||||||
for (second_derivatives_t::const_iterator it2 = jacobian_params_derivatives.begin();
|
{
|
||||||
it2 != jacobian_params_derivatives.end(); it2++)
|
for (second_derivatives_t::const_iterator it2 = jacobian_params_derivatives.begin();
|
||||||
{
|
it2 != jacobian_params_derivatives.end(); it2++)
|
||||||
int eq = it2->first.first;
|
{
|
||||||
int var = it2->first.second.first;
|
int eq = it2->first.first;
|
||||||
int param1 = it2->first.second.second;
|
int var = it2->first.second.first;
|
||||||
expr_t d1 = it2->second;
|
int param1 = it2->first.second.second;
|
||||||
|
expr_t d1 = it2->second;
|
||||||
|
|
||||||
expr_t d2 = d1->getDerivative(param);
|
expr_t d2 = d1->getDerivative(param);
|
||||||
if (d2 == Zero)
|
if (d2 == Zero)
|
||||||
continue;
|
continue;
|
||||||
jacobian_params_second_derivatives[make_pair(eq, make_pair(var, make_pair(param1, param)))] = d2;
|
jacobian_params_second_derivatives[make_pair(eq, make_pair(var, make_pair(param1, param)))] = d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (paramsDerivatives == third)
|
for (second_derivatives_t::const_iterator it2 = second_derivatives.begin();
|
||||||
for (second_derivatives_t::const_iterator it2 = second_derivatives.begin();
|
it2 != second_derivatives.end(); it2++)
|
||||||
it2 != second_derivatives.end(); it2++)
|
{
|
||||||
{
|
int eq = it2->first.first;
|
||||||
int eq = it2->first.first;
|
int var1 = it2->first.second.first;
|
||||||
int var1 = it2->first.second.first;
|
int var2 = it2->first.second.second;
|
||||||
int var2 = it2->first.second.second;
|
expr_t d1 = it2->second;
|
||||||
expr_t d1 = it2->second;
|
|
||||||
|
|
||||||
expr_t d2 = d1->getDerivative(param);
|
expr_t d2 = d1->getDerivative(param);
|
||||||
if (d2 == Zero)
|
if (d2 == Zero)
|
||||||
continue;
|
continue;
|
||||||
hessian_params_derivatives[make_pair(eq, make_pair(var1, make_pair(var2, param)))] = d2;
|
hessian_params_derivatives[make_pair(eq, make_pair(var1, make_pair(var2, param)))] = d2;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue