Class Definition:
class empirical
{
public:
// build objects
int nbX;
int nbY;
int nbParams;
int aux_nbDraws;
int nbOptions;
bool xHomogenous;
bool outsideOption;
arma::cube atoms;
// input objects
arma::mat U;
arma::mat mu;
// equilibrium objects
arma::mat U_sol;
arma::mat mu_sol;
// member functions
~empirical(){};
empirical(){};
explicit empirical(int nbX_inp, int nbY_inp);
explicit empirical(int nbX_inp, int nbY_inp, const arma::cube& atoms_inp, bool xHomogenous_inp, bool outsideOption_inp);
void build(int nbX_inp, int nbY_inp);
void build(int nbX_inp, int nbY_inp, const arma::cube& atoms_inp, bool xHomogenous_inp, bool outsideOption_inp);
double G(const arma::vec& n);
double G(const arma::vec& n, const arma::mat& U_inp, arma::mat& mu_out);
double Gx(const arma::mat& U_x_inp, arma::mat& mu_x_out, int x);
double Gstar(const arma::vec& n);
double Gstar(const arma::vec& n, const arma::mat& mu_inp, arma::mat& U_out);
double Gstarx(const arma::mat& mu_x_inp, arma::mat &U_x_out, int x);
double Gbar(const arma::mat& Ubar, const arma::mat& mubar, const arma::vec& n, arma::mat& U_out, arma::mat& mu_out);
double Gbarx(const arma::vec& Ubar_x, const arma::vec& mubar_x, arma::mat& U_x_out, arma::mat& mu_x_out, int x);
private:
/*
* these private member objects are mostly used by LP solvers
*/
void presolve_LP_Gstar();
void presolve_LP_Gbar();
bool TRAME_PRESOLVED_GSTAR = false;
bool TRAME_PRESOLVED_GBAR = false;
int k_Gstar;
int n_Gstar;
int numnz_Gstar;
int* vind_Gstar;
int* vbeg_Gstar;
double* vval_Gstar;
int k_Gbar;
int n_Gbar;
int numnz_Gbar;
int* vind_Gbar;
int* vbeg_Gbar;
double* vval_Gbar;
};