Minor simplification

master
Sébastien Villemot 2022-07-11 14:05:29 +02:00
parent 9b34fe856f
commit 92047f547e
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
1 changed files with 41 additions and 43 deletions

View File

@ -369,49 +369,47 @@ ExprNode::fillErrorCorrectionRow(int eqn,
// Now fill the matrices // Now fill the matrices
for (const auto &[var_id, lag, param_id, constant] : error_linear_combination) for (const auto &[var_id, lag, param_id, constant] : error_linear_combination)
{ if (auto [orig_vid, orig_lag] = datatree.symbol_table.unrollDiffLeadLagChain(var_id, lag);
auto [orig_vid, orig_lag] = datatree.symbol_table.unrollDiffLeadLagChain(var_id, lag); find(target_lhs.begin(), target_lhs.end(), orig_vid) == target_lhs.end())
if (find(target_lhs.begin(), target_lhs.end(), orig_vid) == target_lhs.end()) {
{ if (orig_lag != -1)
if (orig_lag != -1) {
{ cerr << "ERROR in trend component model: variables in the error correction term should appear with a lag of -1" << endl;
cerr << "ERROR in trend component model: variables in the error correction term should appear with a lag of -1" << endl; exit(EXIT_FAILURE);
exit(EXIT_FAILURE); }
} // This an LHS variable, so fill A0
// This an LHS variable, so fill A0 if (constant != 1)
if (constant != 1) {
{ cerr << "ERROR in trend component model: LHS variable should not appear with a multiplicative constant in error correction term" << endl;
cerr << "ERROR in trend component model: LHS variable should not appear with a multiplicative constant in error correction term" << endl; exit(EXIT_FAILURE);
exit(EXIT_FAILURE); }
} if (*param_id)
if (*param_id) {
{ cerr << "ERROR in trend component model: spurious parameter in error correction term" << endl;
cerr << "ERROR in trend component model: spurious parameter in error correction term" << endl; exit(EXIT_FAILURE);
exit(EXIT_FAILURE); }
} int colidx = static_cast<int>(distance(nontarget_lhs.begin(), find(nontarget_lhs.begin(), nontarget_lhs.end(), orig_vid)));
int colidx = static_cast<int>(distance(nontarget_lhs.begin(), find(nontarget_lhs.begin(), nontarget_lhs.end(), orig_vid))); if (A0.contains({eqn, colidx}))
if (A0.contains({eqn, colidx})) {
{ cerr << "ExprNode::fillErrorCorrection: Error filling A0 matrix: "
cerr << "ExprNode::fillErrorCorrection: Error filling A0 matrix: " << "symb_id encountered more than once in equation" << endl;
<< "symb_id encountered more than once in equation" << endl; exit(EXIT_FAILURE);
exit(EXIT_FAILURE); }
} A0[{eqn, colidx}] = datatree.AddVariable(speed_of_adjustment_param);
A0[{eqn, colidx}] = datatree.AddVariable(speed_of_adjustment_param); }
} else
else {
{ // This is a target, so fill A0star
// This is a target, so fill A0star int colidx = static_cast<int>(distance(target_lhs.begin(), find(target_lhs.begin(), target_lhs.end(), orig_vid)));
int colidx = static_cast<int>(distance(target_lhs.begin(), find(target_lhs.begin(), target_lhs.end(), orig_vid))); expr_t e = datatree.AddTimes(datatree.AddVariable(speed_of_adjustment_param),
expr_t e = datatree.AddTimes(datatree.AddVariable(speed_of_adjustment_param), datatree.AddPossiblyNegativeConstant(-constant));
datatree.AddPossiblyNegativeConstant(-constant)); if (param_id)
if (param_id) e = datatree.AddTimes(e, datatree.AddVariable(*param_id));
e = datatree.AddTimes(e, datatree.AddVariable(*param_id)); if (pair coor{eqn, colidx}; A0star.contains(coor))
if (pair coor{eqn, colidx}; A0star.contains(coor)) A0star[coor] = datatree.AddPlus(e, A0star[coor]);
A0star[coor] = datatree.AddPlus(e, A0star[coor]); else
else A0star[coor] = e;
A0star[coor] = e; }
}
}
} }
} }