Changeset 44d34b6 in git
- Timestamp:
- Feb 1, 2015, 10:01:06 PM (9 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- f16226e1d8662eca29be06420a230cd92d756ff3
- Parents:
- 670e639535c5bd70580255e59bdb06627c71b9f1
- git-author:
- Yue Ren <ren@mathematik.uni-kl.de>2015-02-01 22:01:06+01:00
- git-committer:
- Yue Ren <ren@mathematik.uni-kl.de>2015-02-06 13:47:06+01:00
- Location:
- Singular/dyn_modules/gfanlib
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/dyn_modules/gfanlib/tropicalCurves.cc
r670e639 r44d34b6 10 10 #include <tropicalStrategy.h> 11 11 #include <tropicalVarietyOfPolynomials.h> 12 #include <tropicalCurves.h> 12 13 #include <set> 13 14 #ifndef NDEBUG … … 20 21 * and throws away those of lower dimension than d. 21 22 **/ 22 static std::set<gfan::ZCone> intersect(const std::set<gfan::ZCone>setA,23 const std::set<gfan::ZCone>setB,24 int d=0)23 static ZConesSortedByDimension intersect(const ZConesSortedByDimension &setA, 24 const ZConesSortedByDimension &setB, 25 int d=0) 25 26 { 26 27 if (setA.empty()) … … 28 29 if (setB.empty()) 29 30 return setA; 30 std::set<gfan::ZCone>setAB;31 for ( std::set<gfan::ZCone>::iterator coneOfA=setA.begin(); coneOfA!=setA.end(); coneOfA++)32 { 33 for ( std::set<gfan::ZCone>::iterator coneOfB=setB.begin(); coneOfB!=setB.end(); coneOfB++)31 ZConesSortedByDimension setAB; 32 for (ZConesSortedByDimension::iterator coneOfA=setA.begin(); coneOfA!=setA.end(); coneOfA++) 33 { 34 for (ZConesSortedByDimension::iterator coneOfB=setB.begin(); coneOfB!=setB.end(); coneOfB++) 34 35 { 35 36 gfan::ZCone coneOfIntersection = gfan::intersection(*coneOfA,*coneOfB); … … 111 112 * the initial ideal inI with respect to it, computes the star of the tropical variety in u. 112 113 **/ 113 std::set<gfan::ZCone> tropicalStar(ideal &inI, const ring &r, const gfan::ZVector &u,114 const tropicalStrategy* currentStrategy)114 ZConesSortedByDimension tropicalStar(ideal inI, const ring r, const gfan::ZVector &u, 115 const tropicalStrategy* currentStrategy) 115 116 { 116 117 int k = idSize(inI); … … 119 120 /* Compute the common refinement over all tropical varieties 120 121 * of the polynomials in the generating set */ 121 std::set<gfan::ZCone> C = tropicalVariety(inI->m[0],r,currentStrategy);122 ZConesSortedByDimension C = tropicalVarietySortedByDimension(inI->m[0],r,currentStrategy); 122 123 for (int i=1; i<k; i++) 123 C = intersect(C,tropicalVariety (inI->m[i],r,currentStrategy),d);124 C = intersect(C,tropicalVarietySortedByDimension(inI->m[i],r,currentStrategy),d); 124 125 125 126 /* Cycle through all maximal cones of the refinement. … … 153 154 // std::cout << "computing witness in tropical star!" << std::endl; 154 155 poly gs = witness(mons,inIsSTD,ininIs,s); 155 C = intersect(C,tropicalVariety (gs,s,currentStrategy),d);156 C = intersect(C,tropicalVarietySortedByDimension(gs,s,currentStrategy),d); 156 157 nMapFunc mMap = n_SetMap(s->cf,r->cf); 157 158 poly gr = p_PermPoly(gs,NULL,s,r,mMap,NULL,0); … … 192 193 { 193 194 poly gs = witness(mons,inIsSTD,ininIs,s); 194 C = intersect(C,tropicalVariety (gs,s,currentStrategy),d);195 C = intersect(C,tropicalVarietySortedByDimension(gs,s,currentStrategy),d); 195 196 nMapFunc mMap = n_SetMap(s->cf,r->cf); 196 197 poly gr = p_PermPoly(gs,NULL,s,r,mMap,NULL,0); … … 219 220 220 221 221 gfan::ZMatrix raysOfTropicalStar(ideal I, const ring r, const gfan::ZVector u, const tropicalStrategy* currentStrategy)222 { 223 std::set<gfan::ZCone>C = tropicalStar(I,r,u,currentStrategy);222 gfan::ZMatrix raysOfTropicalStar(ideal I, const ring r, const gfan::ZVector &u, const tropicalStrategy* currentStrategy) 223 { 224 ZConesSortedByDimension C = tropicalStar(I,r,u,currentStrategy); 224 225 // gfan::ZFan* zf = toFanStar(C); 225 226 // std::cout << zf->toString(); … … 228 229 if (!currentStrategy->restrictToLowerHalfSpace()) 229 230 { 230 for ( std::set<gfan::ZCone>::iterator zc=C.begin(); zc!=C.end(); zc++)231 for (ZConesSortedByDimension::iterator zc=C.begin(); zc!=C.end(); zc++) 231 232 { 232 233 assume(zc->dimensionOfLinealitySpace()+1 == zc->dimension()); … … 237 238 else 238 239 { 239 for ( std::set<gfan::ZCone>::iterator zc=C.begin(); zc!=C.end(); zc++)240 for (ZConesSortedByDimension::iterator zc=C.begin(); zc!=C.end(); zc++) 240 241 { 241 242 assume(zc->dimensionOfLinealitySpace()+2 == zc->dimension()); … … 266 267 tropicalStrategy currentCase(inI,currRing); 267 268 gfan::ZVector* v = bigintmatToZVector(u); 268 std::set<gfan::ZCone>C = tropicalStar(inI,currRing,*v,¤tCase);269 ZConesSortedByDimension C = tropicalStar(inI,currRing,*v,¤tCase); 269 270 id_Delete(&inI,currRing); 270 271 delete u; 271 272 delete v; 272 res->rtyp = fanID; 273 res->data = (char*) toFanStar(C); 273 res->rtyp = NONE; 274 res->data = NULL; 275 // res->rtyp = fanID; 276 // res->data = (char*) toFanStar(C); 274 277 return FALSE; 275 278 } -
Singular/dyn_modules/gfanlib/tropicalCurves.h
r670e639 r44d34b6 6 6 #include <libpolys/polys/monomials/p_polys.h> 7 7 #include <tropicalStrategy.h> 8 #include <tropicalVarietyOfPolynomials.h> 8 9 9 std::set<gfan::ZCone> tropicalStar(const ideal I, const ring r, const gfan::ZVectoru,10 const tropicalStrategy* currentStrategy);11 gfan::ZMatrix raysOfTropicalStar(ideal I, const ring r, const gfan::ZVector u,10 ZConesSortedByDimension tropicalStar(const ideal I, const ring r, const gfan::ZVector &u, 11 const tropicalStrategy* currentStrategy); 12 gfan::ZMatrix raysOfTropicalStar(ideal I, const ring r, const gfan::ZVector &u, 12 13 const tropicalStrategy* currentStrategy); 13 14 -
Singular/dyn_modules/gfanlib/tropicalVarietyOfPolynomials.cc
r670e639 r44d34b6 5 5 6 6 #include <tropicalStrategy.h> 7 #include <tropicalVarietyOfPolynomials.h> 7 8 8 9 #ifndef NDEBUG … … 22 23 int n = rVar(r); 23 24 std::set<gfan::ZCone> tropVar; 25 if (g && g->next) 26 { 27 int* expv = (int*) omAlloc((n+1)*sizeof(int)); 28 gfan::ZMatrix exponents = gfan::ZMatrix(0,n); 29 for (poly s=g; s; pIter(s)) 30 { 31 p_GetExpV(s,expv,r); 32 gfan::ZVector zv = intStar2ZVector(n,expv); 33 exponents.appendRow(intStar2ZVector(n,expv)); 34 } 35 omFreeSize(expv,(n+1)*sizeof(int)); 36 37 int l = exponents.getHeight(); 38 gfan::ZVector lowerHalfSpaceCondition = gfan::ZVector(n); 39 lowerHalfSpaceCondition[0] = -1; 40 for (int i=0; i<l; i++) 41 { 42 for (int j=i+1; j<l; j++) 43 { 44 gfan::ZMatrix equation = gfan::ZMatrix(0,n); 45 equation.appendRow(exponents[i]-exponents[j]); 46 gfan::ZMatrix inequalities = gfan::ZMatrix(0,n); 47 if (currentCase->restrictToLowerHalfSpace()) 48 inequalities.appendRow(lowerHalfSpaceCondition); 49 for (int k=0; k<l; k++) 50 if (k!=i && k!=j) inequalities.appendRow(exponents[i]-exponents[k]); 51 gfan::ZCone zc = gfan::ZCone(inequalities,equation); 52 if (zc.dimension()>=n-1) 53 { 54 zc.canonicalize(); 55 tropVar.insert(zc); 56 } 57 } 58 } 59 } 60 return tropVar; 61 } 62 63 ZConesSortedByDimension tropicalVarietySortedByDimension(const poly g, const ring r, const tropicalStrategy* currentCase) 64 { 65 int n = rVar(r); 66 ZConesSortedByDimension tropVar; 24 67 if (g && g->next) 25 68 { -
Singular/dyn_modules/gfanlib/tropicalVarietyOfPolynomials.h
r670e639 r44d34b6 13 13 #endif 14 14 15 struct ZConeCompareDimensionFirst 16 { 17 bool operator() (const gfan::ZCone &zc, const gfan::ZCone &zd) const 18 { 19 int n = zc.dimension(); 20 int m = zd.dimension(); 21 if (n==m) 22 return zc<zd; 23 else 24 return n<m; 25 } 26 }; 27 28 typedef std::set<gfan::ZCone,ZConeCompareDimensionFirst> ZConesSortedByDimension; 29 15 30 std::set<gfan::ZCone> tropicalVariety(const poly g, const ring r, const tropicalStrategy* currentCase); 31 ZConesSortedByDimension tropicalVarietySortedByDimension(const poly g, const ring r, const tropicalStrategy* currentCase); 16 32 17 33 #ifndef NDEBUG
Note: See TracChangeset
for help on using the changeset viewer.