diff --git a/DynamicModel.cc b/DynamicModel.cc index cc3dcf1c9b5ec8c67852a71dde49c3808c9cef00..ce3ea1134b03a0e52b783dc25a496f64e9eb3ee2 100644 --- a/DynamicModel.cc +++ b/DynamicModel.cc @@ -3897,11 +3897,17 @@ DynamicModel::findUnusedEndogenous() set<int> DynamicModel::findUnusedExogenous() { - set<int> usedExo, unusedExo; + set<int> usedExo, unusedExo, unobservedExo; for (int i = 0; i < (int) equations.size(); i++) equations[i]->collectVariables(eExogenous, usedExo); + for (int i = 0; i < (int) equations.size(); i++) + equations[i]->collectVariables(eExogenous, usedExo); + set<int> observedExo = symbol_table.getExogenous(); set<int> allExo = symbol_table.getExogenous(); set_difference(allExo.begin(), allExo.end(), + observedExo.begin(), observedExo.end(), + inserter(unobservedExo, unobservedExo.begin())); + set_difference(unobservedExo.begin(), unobservedExo.end(), usedExo.begin(), usedExo.end(), inserter(unusedExo, unusedExo.begin())); return unusedExo; diff --git a/SymbolTable.cc b/SymbolTable.cc index 6d5f6ac2d895269457515df21d404a6226969d6d..ce7fed3f8db817af1a41c23c71b3428f428a35aa 100644 --- a/SymbolTable.cc +++ b/SymbolTable.cc @@ -861,6 +861,18 @@ SymbolTable::getExogenous() const return exogs; } +set<int> +SymbolTable::getObservedExogenous() const +{ + set <int> oexogs; + for (symbol_table_type::const_iterator it = symbol_table.begin(); + it != symbol_table.end(); it++) + if (getType(it->second) == eExogenous) + if (isObservedExogenousVariable(it->second)) + oexogs.insert(it->second); + return oexogs; +} + set<int> SymbolTable::getEndogenous() const { diff --git a/SymbolTable.hh b/SymbolTable.hh index 1015003d9f0fb4fb2503a32b93ef579c5c1775b8..37f95c181b07db5bc81bfe959fd90897e7f7a06b 100644 --- a/SymbolTable.hh +++ b/SymbolTable.hh @@ -328,6 +328,8 @@ public: vector <int> getTrendVarIds() const; //! Get list of exogenous variables set <int> getExogenous() const; + //! Get list of exogenous variables + set <int> getObservedExogenous() const; //! Get list of endogenous variables set <int> getEndogenous() const; //! Is a given symbol an auxiliary variable