Main Page   Class Hierarchy   Compound List   File List   Contact   Download   Symbolic Constraints   Examples  

polynomial.h

00001 #ifndef SCIL_POLYNOMIAL_H
00002 #define SCIL_POLYNOMIAL_H
00003 
00004 /*
00005 Thu Mar  5 16:03:20 CET 2009
00006 baumann
00007 class for polynomials
00008 */
00009 
00010 #include<scil/core/monomial.h>
00011 
00012 namespace SCIL {
00013    class ILP_Problem;
00014    class polynomial;
00015 
00017 std::ostream& operator<<(std::ostream& o,const polynomial& p);
00019 polynomial operator*(double d, const polynomial& p);
00020 
00022 class polynomial {
00023    private:
00025       std::list<monomial> p;
00026 
00027    public:
00029       polynomial() {};
00031       polynomial(const var& v) {
00032          p.push_back(monomial(v));
00033       }
00035       polynomial(const monomial& m) {
00036          p.push_back(m);
00037       }
00039 
00041       polynomial(const row& r) {
00042          row_entry::list_constiterator it = r.begin();
00043          for( it=r.begin(); it!=r.end(); it++ ) {
00044             if( it->Var != nil ) {
00045                p.push_back(monomial(it->coeff, it->Var));
00046             } else {
00047                std::cerr<<"Polynomial:    Warning: constant term is ignored"<<std::endl;
00048             }
00049          }
00050       }
00051 
00053       inline std::list<monomial> get_p() const {
00054          return p;
00055       }
00056 
00057       double value(solution& sol) {
00058          std::list<monomial>::iterator it;
00059          double val = 0.;
00060          for( it = p.begin(); it != p.end(); it++)
00061             val += (*it).value(sol);
00062          return val;
00063       }
00064 
00071       void normalize(bool clean = false);
00072 
00074       polynomial& operator+=(const polynomial& p);
00076       polynomial operator+(const polynomial& p);
00078       polynomial& operator+=(const monomial& m);
00080       polynomial operator+(const monomial& m);
00085       polynomial& operator+=(const row& r);
00090       polynomial operator+(const row& r);
00092       polynomial& operator+=(const var& v);
00094       polynomial operator+(const var& v);
00096       polynomial& operator-=(const polynomial& p);
00098       polynomial operator-(const polynomial& p);
00100       polynomial& operator-=(const monomial& m);
00102       polynomial operator-(const monomial& m);
00107       polynomial& operator-=(const row& r);
00112       polynomial operator-(const row& r);
00114       polynomial& operator-=(const var& v);
00116       polynomial operator-(const var& v);
00118       polynomial& operator*=(double d);
00120       polynomial operator*(double d);
00122       polynomial operator*(const monomial& m);
00124       polynomial& operator*=(const monomial& m);
00126       polynomial operator*(const polynomial& p);
00128       polynomial& operator*=(const polynomial& p);
00130       polynomial operator*(const var& v);
00132       polynomial& operator*=(const var& v);
00137       polynomial operator*(const row& r);
00142       polynomial& operator*=(const row& r);
00144       pol_constraint operator<=(double rhs);
00146       pol_constraint operator>=(double rhs);
00148       pol_constraint operator==(double rhs);
00149 };
00150 
00152 class pol_constraint {
00153    friend class ILP_Problem;
00154    private:
00155       polynomial p;
00156       cons_sense s;
00157       double rhs;
00158 
00159    public:
00160       pol_constraint(polynomial _p, cons_sense _s, double _rhs)
00161       : p(_p), s(_s), rhs(_rhs) {
00162       }
00163 
00164 };
00165 
00166 };
00167 #endif
Generated on Mon Mar 28 22:03:49 2011 for SCIL by  doxygen 1.6.3