Ejemplo n.º 1
0
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]); */
   }
}
Ejemplo n.º 2
0
  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;
  }