void multiple_roots ( int n, dcmplx p[n], double eps, int maxit, dcmplx r[n-1], double tol, int m[n-1] ) { int i,nit; dcmplx *dp[n-1]; roots(n,p,eps,maxit,r); multiplicities(n-1,tol,r,m); derivatives(n,n-1,p,dp); /* write_derivatives(n,n-1,dp); */ for(i=0; i<n-1; i++) { if (m[i] == 1) nit = Newton(n,p,dp[0],&r[i],eps,8); else nit = Newton(n-m[i]+1,dp[m[i]-2],dp[m[i]-1],&r[i],eps,8); /* printf("refined root %d : ", i); writeln_dcmplx(r[i]); */ } }
ZFan::ZFan(std::istream &f): coneCollection(0), complex(0) { // PolyhedralFan PolyhedralFan::readFan(string const &filename, bool onlyMaximal, IntegerVector *w, set<int> const *coneIndices, SymmetryGroup const *sym, bool readCompressedIfNotSym) PolymakeFile inFile; //assert(0); inFile.open(f); int n=inFile.readCardinalProperty("AMBIENT_DIM").toInt(); int nRays=inFile.readCardinalProperty("N_RAYS").toInt(); ZMatrix rays=inFile.readMatrixProperty("RAYS",nRays,n); int linealityDim=inFile.readCardinalProperty("LINEALITY_DIM").toInt(); ZMatrix linealitySpace=inFile.readMatrixProperty("LINEALITY_SPACE",linealityDim,n); SymmetryGroup sym(n); bool readingSymmetricComplex=false; if(inFile.hasProperty("SYMMETRY_GENERATORS")) { sym.computeClosure(ZToIntMatrix(inFile.readMatrixProperty("SYMMETRY_GENERATORS",-1,n))); readingSymmetricComplex=true; } const char *sectionName=0; const char *sectionNameMultiplicities=0; if(readingSymmetricComplex) { if(inFile.hasProperty("MAXIMAL_CONES_ORBITS")) { sectionName="MAXIMAL_CONES_ORBITS"; sectionNameMultiplicities="MULTIPLICITIES_ORBITS"; } else { sectionName="CONES_ORBITS"; } } else { if(inFile.hasProperty("MAXIMAL_CONES")) { sectionName="MAXIMAL_CONES"; sectionNameMultiplicities="MULTIPLICITIES"; } else { sectionName="CONES"; } } /* if(sym || readCompressedIfNotSym) { sectionName=(onlyMaximal)?"MAXIMAL_CONES_ORBITS":"CONES_ORBITS"; sectionNameMultiplicities=(onlyMaximal)?"MULTIPLICITIES_ORBITS":"DUMMY123"; } else */ /*{ sectionName="MAXIMAL_CONES";//(onlyMaximal)?"MAXIMAL_CONES":"CONES"; sectionNameMultiplicities="MULTIPLICITIES";//(onlyMaximal)?"MULTIPLICITIES":"DUMMY123"; } */ // ZVector w2(n); // if(w==0)w=&w2; // SymmetryGroup sym2(n); // if(sym==0)sym=&sym2; /* sectionName=0; if(inFile.hasProperty("MAXIMAL_CONES")) sectionName="MAXIMAL_CONES"; else { if(inFile.hasProperty("CONES")) sectionName="CONES"; else assert(0); }*/ vector<list<int> > cones=inFile.readMatrixIncidenceProperty(sectionName); // IntegerVectorList r; bool hasMultiplicities=inFile.hasProperty(sectionNameMultiplicities); ZMatrix multiplicities(0,0); if(hasMultiplicities)multiplicities=inFile.readMatrixProperty(sectionNameMultiplicities,cones.size(),1); ZFan ret(sym); // log2 cerr<< "Number of orbits to expand "<<cones.size()<<endl; for(int i=0;i<cones.size();i++) // if(coneIndices==0 || coneIndices->count(i)) { // log2 cerr<<"Expanding symmetries of cone"<<endl; { ZMatrix coneRays(0,n); for(list<int>::const_iterator j=cones[i].begin();j!=cones[i].end();j++) coneRays.appendRow((rays[*j])); ZCone C=ZCone::givenByRays(coneRays,linealitySpace); if(hasMultiplicities)C.setMultiplicity(multiplicities[i][0]); // for(SymmetryGroup::ElementContainer::const_iterator perm=sym->elements.begin();perm!=sym->elements.end();perm++) { // if(C.contains(perm.applyInverse(*w))) // { // PolyhedralCone C2=C.permuted(*perm); // C2.canonicalize(); // ret.insert(C2); // } ret.insert(C); } } } // return ret; *this=ret; }