further simplifications related to AR matrices

issue#70
Houtan Bastani 2019-03-15 14:06:02 +01:00
parent f1d1c1e1c1
commit 50c26f4945
No known key found for this signature in database
GPG Key ID: 000094FB955BE169
3 changed files with 17 additions and 14 deletions

View File

@ -5872,21 +5872,10 @@ BinaryOpNode::fillAutoregressiveRow(int eqn, const vector<int> &lhs, map<tuple<i
}
if (vid >= 0)
{
int vidineq = vid;
while (datatree.symbol_table.isAuxiliaryVariable(vid))
try
{
vid = datatree.symbol_table.getOrigSymbIdForAuxVar(vid);
}
catch (...)
{
break;
}
if (vidineq != vid)
if (datatree.symbol_table.isDiffAuxiliaryVariable(vid))
{
vid = datatree.symbol_table.getOrigSymbIdForDiffAuxVar(vidineq);
lag = -datatree.symbol_table.getOrigLeadLagForDiffAuxVar(vidineq);
lag = -datatree.symbol_table.getOrigLeadLagForDiffAuxVar(vid);
vid = datatree.symbol_table.getOrigSymbIdForDiffAuxVar(vid);
}
if (find(lhs.begin(), lhs.end(), vid) == lhs.end())

View File

@ -1091,6 +1091,18 @@ SymbolTable::isAuxiliaryVariableButNotMultiplier(int symb_id) const
return false;
}
bool
SymbolTable::isDiffAuxiliaryVariable(int symb_id) const
{
for (const auto & aux_var : aux_vars)
if (aux_var.get_symb_id() == symb_id &&
(aux_var.get_type() == AuxVarType::diff
|| aux_var.get_type() == AuxVarType::diffLag
|| aux_var.get_type() == AuxVarType::diffLead))
return true;
return false;
}
set<int>
SymbolTable::getOrigEndogenous() const
{

View File

@ -408,6 +408,8 @@ public:
bool isAuxiliaryVariable(int symb_id) const;
//! Is a given symbol an auxiliary variable but not a Lagrange multiplier
bool isAuxiliaryVariableButNotMultiplier(int symb_id) const;
//! Is a given symbol a diff, diff lead, or diff lag auxiliary variable
bool isDiffAuxiliaryVariable(int symb_id) const;
//! Get list of endogenous variables without aux vars
set <int> getOrigEndogenous() const;
};