realroot_doc 0.1.1
|
# include <realroot/GMP.hpp> # include <realroot/monomial.hpp> # include <realroot/polynomial_sparse.hpp> # include <realroot/polynomial_dual.hpp> # include <realroot/polynomial_bernstein.hpp> # include <realroot/polynomial_tensor.hpp> template<class POL> void test() { using namespace mmx; POL m0(1), m1(1,3), m2(2.1,2,3); std::cout<<m0<<std::endl; std::cout<<m1<<std::endl; std::cout<<m2 <<" nbvar: "<<m2.nbvar() <<", size: "<<m2.size()<<std::endl; POL s=m1+m2; std::cout<< s <<" nbvar: "<<(s).nbvar() <<", size: "<<(s).size()<<std::endl; std::cout<< m1-m2 <<std::endl; std::cout<< -m2 <<std::endl; std::cout<< m1*m2 <<std::endl; m1 *= 4.2; std::cout<<m1<<std::endl; m1 += 3.1; std::cout<<m1<<std::endl; m1 -= 2; std::cout<<m1<<std::endl; std::cout<<"-----------"<<std::endl; POL p("a^2+b-2"); std::cout <<p<<std::endl; p *= m1; std::cout<<p<<std::endl; p += m2; std::cout<<p<<std::endl; p -= m1; std::cout<<p<<std::endl; // POL p; std::cout <<p<<std::endl; // q=p*p; std::cout<<q<<std::endl; } int main(int argc, char** argv) { using namespace mmx; test< polynomial< double, with<MonomialTensor> > >(); test< polynomial< double, with<Bernstein> > >(); test< polynomial< double, with<Sparse,Lex> > >(); test< polynomial< double, with<Dual,DegRevLex> > >(); typedef polynomial< double, with<Sparse,DegRevLex> > Polynomial; typedef polynomial< double, with<Dual ,DegRevLex> > Dual; Polynomial p("x^2+y^2+2*x*y-1"); std::cout <<p<<std::endl; Dual l("z^2-y*x+1"); std::cout <<l<<std::endl; std::cout <<l*p<<std::endl; std::cout <<p*l<<std::endl; std::cout<<"Evaluation:"<<std::endl; polynomial< double, with<Bernstein> > bb("1+2*x+x^2"); std::cout <<bb<<std::endl; std::cout<< bb(1,1)<<std::endl; Polynomial bb2("2*x+1"); std::cout <<bb2<<std::endl; std::cout<< bb2(1,1)<<std::endl; typedef ring< GMP::integer, Sparse, DegRevLex>::Polynomial PolZ; ring< double , Sparse, DegRevLex>::Polynomial p1("2*x^2+1");; PolZ p2= as<PolZ>(p1); PolZ p3; let::assign(p3,p1); // q=p*p; std::cout<<q<<std::endl; }