Changeset ff48aa in git
- Timestamp:
- Jan 31, 2015, 11:44:20 AM (9 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 5510099a60c7cd4cb8ef47b8e583ed11e4b4ffe3
- Parents:
- 08749da88db85345212e694597d458072913a9c5
- git-author:
- Yue Ren <ren@mathematik.uni-kl.de>2015-01-31 11:44:20+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:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/dyn_modules/gfanlib/bbfan.cc
r08749da rff48aa 539 539 { 540 540 leftv v=u->next; 541 //if ((v != NULL) && (v->Typ() == INT_CMD))541 if ((v != NULL) && (v->Typ() == INT_CMD)) 542 542 { 543 543 leftv w=v->next; 544 //if ((w != NULL) && (w->Typ() == INT_CMD))544 if ((w != NULL) && (w->Typ() == INT_CMD)) 545 545 { 546 546 gfan::ZFan* zf = (gfan::ZFan*) u->Data(); -
Singular/dyn_modules/gfanlib/groebnerCone.cc
r08749da rff48aa 59 59 groebnerCone::groebnerCone(): 60 60 polynomialIdeal(NULL), 61 reducedPolynomialIdeal(NULL),62 initialPolynomialIdeal(NULL),63 61 polynomialRing(NULL), 64 62 polyhedralCone(gfan::ZCone(0)), … … 70 68 groebnerCone::groebnerCone(const ideal I, const ring r, const tropicalStrategy& currentCase): 71 69 polynomialIdeal(NULL), 72 reducedPolynomialIdeal(NULL),73 initialPolynomialIdeal(NULL),74 70 polynomialRing(NULL), 75 71 currentStrategy(¤tCase) 76 72 { 77 73 assume(checkPolynomialInput(I,r)); 78 if (I) 79 { 80 polynomialIdeal = id_Copy(I,r); 81 reducedPolynomialIdeal = id_Copy(I,r); 82 } 74 if (I) polynomialIdeal = id_Copy(I,r); 83 75 if (r) polynomialRing = rCopy(r); 84 currentCase.pReduce(polynomialIdeal,r); 85 currentCase.reduce(reducedPolynomialIdeal,polynomialRing); 76 ideal redI = id_Copy(polynomialIdeal,polynomialRing); 77 currentCase.pReduce(redI,polynomialRing); 78 currentCase.reduce(redI,polynomialRing); 86 79 87 80 int n = rVar(polynomialRing); … … 92 85 gfan::ZVector tailexpw = gfan::ZVector(n); 93 86 gfan::ZMatrix inequalities = gfan::ZMatrix(0,n); 94 for (int i=0; i<idSize(red ucedPolynomialIdeal); i++)95 { 96 g = red ucedPolynomialIdeal->m[i];87 for (int i=0; i<idSize(redI); i++) 88 { 89 g = redI->m[i]; 97 90 if (g) 98 91 { … … 121 114 polyhedralCone.canonicalize(); 122 115 interiorPoint = polyhedralCone.getRelativeInteriorPoint(); 123 initialPolynomialIdeal = initial(reducedPolynomialIdeal,polynomialRing,interiorPoint);124 116 assume(checkOrderingAndCone(polynomialRing,polyhedralCone)); 117 id_Delete(&redI,polynomialRing); 125 118 } 126 119 … … 134 127 groebnerCone::groebnerCone(const ideal I, const ring r, const gfan::ZVector& w, const tropicalStrategy& currentCase): 135 128 polynomialIdeal(NULL), 136 reducedPolynomialIdeal(NULL),137 initialPolynomialIdeal(NULL),138 129 polynomialRing(NULL), 139 130 currentStrategy(¤tCase) 140 131 { 141 132 assume(checkPolynomialInput(I,r)); 142 if (I) 143 { 144 polynomialIdeal = id_Copy(I,r); 145 reducedPolynomialIdeal = id_Copy(I,r); 146 } 133 if (I) polynomialIdeal = id_Copy(I,r); 147 134 if (r) polynomialRing = rCopy(r); 148 currentCase.pReduce(polynomialIdeal,r); 149 currentCase.reduce(reducedPolynomialIdeal,polynomialRing); 135 ideal redI = id_Copy(polynomialIdeal,polynomialRing); 136 currentCase.pReduce(redI,polynomialRing); 137 currentCase.reduce(redI,polynomialRing); 150 138 151 139 int n = rVar(polynomialRing); … … 153 141 gfan::ZMatrix equations = gfan::ZMatrix(0,n); 154 142 int* expv = (int*) omAlloc((n+1)*sizeof(int)); 155 for (int i=0; i<idSize(red ucedPolynomialIdeal); i++)156 { 157 poly g = red ucedPolynomialIdeal->m[i];143 for (int i=0; i<idSize(redI); i++) 144 { 145 poly g = redI->m[i]; 158 146 if (g) 159 147 { … … 186 174 polyhedralCone.canonicalize(); 187 175 interiorPoint = polyhedralCone.getRelativeInteriorPoint(); 188 initialPolynomialIdeal = initial(reducedPolynomialIdeal,polynomialRing,interiorPoint);189 176 assume(checkOrderingAndCone(polynomialRing,polyhedralCone)); 177 id_Delete(&redI,polynomialRing); 190 178 } 191 179 … … 196 184 groebnerCone::groebnerCone(const ideal I, const ring r, const gfan::ZVector& u, const gfan::ZVector& w, const tropicalStrategy& currentCase): 197 185 polynomialIdeal(NULL), 198 reducedPolynomialIdeal(NULL),199 initialPolynomialIdeal(NULL),200 186 polynomialRing(NULL), 201 187 currentStrategy(¤tCase) 202 188 { 203 189 assume(checkPolynomialInput(I,r)); 204 if (I) 205 { 206 polynomialIdeal = id_Copy(I,r); 207 reducedPolynomialIdeal = id_Copy(I,r); 208 } 190 if (I) polynomialIdeal = id_Copy(I,r); 209 191 if (r) polynomialRing = rCopy(r); 210 currentCase.pReduce(polynomialIdeal,r); 211 currentCase.reduce(reducedPolynomialIdeal,polynomialRing); 192 ideal redI = id_Copy(polynomialIdeal,polynomialRing); 193 currentCase.pReduce(redI,polynomialRing); 194 currentCase.reduce(redI,polynomialRing); 212 195 213 196 int n = rVar(polynomialRing); … … 215 198 gfan::ZMatrix equations = gfan::ZMatrix(0,n); 216 199 int* expv = (int*) omAlloc((n+1)*sizeof(int)); 217 for (int i=0; i<idSize(red ucedPolynomialIdeal); i++)218 { 219 poly g = red ucedPolynomialIdeal->m[i];200 for (int i=0; i<idSize(redI); i++) 201 { 202 poly g = redI->m[i]; 220 203 if (g) 221 204 { … … 249 232 polyhedralCone.canonicalize(); 250 233 interiorPoint = polyhedralCone.getRelativeInteriorPoint(); 251 initialPolynomialIdeal = initial(reducedPolynomialIdeal,polynomialRing,interiorPoint);252 234 assume(checkOrderingAndCone(polynomialRing,polyhedralCone)); 235 id_Delete(&redI,polynomialRing); 253 236 } 254 237 … … 256 239 groebnerCone::groebnerCone(const ideal I, const ideal inI, const ring r, const tropicalStrategy& currentCase): 257 240 polynomialIdeal(id_Copy(I,r)), 258 reducedPolynomialIdeal(id_Copy(I,r)),259 initialPolynomialIdeal(id_Copy(inI,r)),260 241 polynomialRing(rCopy(r)), 261 242 currentStrategy(¤tCase) … … 263 244 assume(checkPolynomialInput(I,r)); 264 245 assume(checkPolynomialInput(inI,r)); 265 currentCase.pReduce(polynomialIdeal,r); 266 currentStrategy->reduce(reducedPolynomialIdeal,polynomialRing); 267 // currentStrategy->reduce(initialPolynomialIdeal,polynomialRing); 246 247 ideal redI = id_Copy(polynomialIdeal,polynomialRing); 248 currentCase.pReduce(redI,polynomialRing); 249 currentCase.reduce(redI,polynomialRing); 268 250 269 251 int n = rVar(r); 270 252 gfan::ZMatrix equations = gfan::ZMatrix(0,n); 271 253 int* expv = (int*) omAlloc((n+1)*sizeof(int)); 272 for (int i=0; i<idSize(in itialPolynomialIdeal); i++)273 { 274 poly g = in itialPolynomialIdeal->m[i];254 for (int i=0; i<idSize(inI); i++) 255 { 256 poly g = inI->m[i]; 275 257 if (g) 276 258 { … … 286 268 } 287 269 gfan::ZMatrix inequalities = gfan::ZMatrix(0,n); 288 for (int i=0; i<idSize(red ucedPolynomialIdeal); i++)289 { 290 poly g = red ucedPolynomialIdeal->m[i];270 for (int i=0; i<idSize(redI); i++) 271 { 272 poly g = redI->m[i]; 291 273 if (g) 292 274 { … … 313 295 interiorPoint = polyhedralCone.getRelativeInteriorPoint(); 314 296 assume(checkOrderingAndCone(polynomialRing,polyhedralCone)); 297 id_Delete(&redI,polynomialRing); 315 298 } 316 299 317 300 groebnerCone::groebnerCone(const groebnerCone &sigma): 318 301 polynomialIdeal(NULL), 319 reducedPolynomialIdeal(NULL),320 initialPolynomialIdeal(NULL),321 302 polynomialRing(NULL), 322 303 polyhedralCone(gfan::ZCone(sigma.getPolyhedralCone())), … … 328 309 assume(checkPolyhedralInput(sigma.getPolyhedralCone(),sigma.getInteriorPoint())); 329 310 if (sigma.getPolynomialIdeal()) polynomialIdeal = id_Copy(sigma.getPolynomialIdeal(),sigma.getPolynomialRing()); 330 if (sigma.getReducedPolynomialIdeal()) reducedPolynomialIdeal = id_Copy(sigma.getReducedPolynomialIdeal(),sigma.getPolynomialRing());331 if (sigma.getInitialPolynomialIdeal()) initialPolynomialIdeal = id_Copy(sigma.getInitialPolynomialIdeal(),sigma.getPolynomialRing());332 311 if (sigma.getPolynomialRing()) polynomialRing = rCopy(sigma.getPolynomialRing()); 333 312 } … … 339 318 assume(checkPolyhedralInput(polyhedralCone,interiorPoint)); 340 319 if (polynomialIdeal) id_Delete(&polynomialIdeal,polynomialRing); 341 if (reducedPolynomialIdeal) id_Delete(&reducedPolynomialIdeal,polynomialRing);342 if (initialPolynomialIdeal) id_Delete(&initialPolynomialIdeal,polynomialRing);343 320 if (polynomialRing) rDelete(polynomialRing); 344 321 } … … 442 419 * to obtain an initial form with respect to interiorPoint+e*facetNormal, 443 420 * for e>0 sufficiently small */ 444 std::pair<ideal,ring> flipped = currentStrategy->computeFlip( reducedPolynomialIdeal,polynomialRing,interiorPoint,facetNormal);421 std::pair<ideal,ring> flipped = currentStrategy->computeFlip(polynomialIdeal,polynomialRing,interiorPoint,facetNormal); 445 422 assume(checkPolynomialInput(flipped.first,flipped.second)); 446 423 groebnerCone flippedCone(flipped.first, flipped.second, interiorPoint, facetNormal, *currentStrategy); -
Singular/dyn_modules/gfanlib/groebnerCone.h
r08749da rff48aa 35 35 ideal polynomialIdeal; 36 36 /** 37 * reduced form of the ideal from which the equations and inequalities can be read38 */39 ideal reducedPolynomialIdeal;40 /**41 * generators of the initial ideal42 */43 ideal initialPolynomialIdeal;44 /**45 37 * ring in which the ideal exists 46 38 */ … … 74 66 75 67 ideal getPolynomialIdeal() const { return polynomialIdeal; }; 76 ideal getReducedPolynomialIdeal() const { return reducedPolynomialIdeal; };77 ideal getInitialPolynomialIdeal() const { return initialPolynomialIdeal; };78 68 ring getPolynomialRing() const { return polynomialRing; }; 79 69 gfan::ZCone getPolyhedralCone() const { return polyhedralCone; }; -
Singular/dyn_modules/gfanlib/startingCone.cc
r08749da rff48aa 64 64 int dim = zc.dimension(); 65 65 return (linDim+1)==dim; 66 } 67 68 69 /** 70 * Computes a starting point outside the lineatliy space by traversing the Groebner fan, 71 * checking each cone whether it contains a ray in the tropical variety. 72 * Returns a point in the tropical variety and a maximal Groebner cone containing the point. 73 **/ 74 std::pair<gfan::ZVector,groebnerCone> tropicalStartingPoint(const ideal I, const ring r, const tropicalStrategy& currentStrategy) 75 { 76 // start by computing a maximal Groebner cone and 77 // check whether one of its rays lies in the tropical variety 78 const groebnerCone sigma(I,r,currentStrategy); 79 gfan::ZVector startingPoint = sigma.tropicalPoint(); 80 if (startingPoint.size() > 0) 81 return std::make_pair(startingPoint,sigma); 82 83 // if not, traverse the groebnerFan and until such a cone is found 84 // and return the maximal cone together with a point in its ray 85 groebnerCones groebnerFan; 86 groebnerCones workingList; 87 workingList.insert(sigma); 88 while (!workingList.empty()) 89 { 90 const groebnerCone sigma = *(workingList.begin()); 91 groebnerCones neighbours = sigma.groebnerNeighbours(); 92 for (groebnerCones::iterator tau = neighbours.begin(); tau!=neighbours.end(); tau++) 93 { 94 if (groebnerFan.count(*tau) == 0) 95 { 96 if (workingList.count(*tau) == 0) 97 { 98 startingPoint = tau->tropicalPoint(); 99 if (startingPoint.size() > 0) 100 return std::make_pair(startingPoint,*tau); 101 } 102 workingList.insert(*tau); 103 } 104 } 105 groebnerFan.insert(sigma); 106 workingList.erase(sigma); 107 } 108 109 // return some trivial output, if such a cone cannot be found 110 gfan::ZVector emptyVector = gfan::ZVector(0); 111 groebnerCone emptyCone = groebnerCone(); 112 return std::pair<gfan::ZVector,groebnerCone>(emptyVector,emptyCone); 66 113 } 67 114 -
Singular/dyn_modules/gfanlib/std_wrapper.cc
r08749da rff48aa 10 10 11 11 intvec* nullVector = NULL; 12 ideal stdI = kStd(I,currRing->qideal,h,&nullVector); 12 ideal stdI = kStd(I,currRing->qideal,h,&nullVector); // there is still a memory leak here!!! 13 id_DelDiv(stdI,currRing); 14 idSkipZeroes(stdI); 13 15 14 16 if (origin != r) -
Singular/dyn_modules/gfanlib/tropical.cc
r08749da rff48aa 235 235 p->iiAddCproc("","groebnerCone",FALSE,groebnerCone); 236 236 p->iiAddCproc("","maximalGroebnerCone",FALSE,maximalGroebnerCone); 237 p->iiAddCproc("","homogeneitySpace",FALSE,homogeneitySpace); 237 238 p->iiAddCproc("","initial",FALSE,initial); 238 239 // p->iiAddCproc("","tropicalNeighbours",FALSE,tropicalNeighbours); … … 276 277 // p->iiAddCproc("","ppreduceInitially",FALSE,ppreduceInitially); 277 278 // p->iiAddCproc("","ttreduceInitially",FALSE,ttreduceInitially); 278 //p->iiAddCproc("","homogeneitySpace",FALSE,homogeneitySpace);279 } 279 p->iiAddCproc("","homogeneitySpace",FALSE,homogeneitySpace); 280 } -
Singular/dyn_modules/gfanlib/tropicalCurves.cc
r08749da rff48aa 131 131 * If all initial ideals are monomial free, then we have our tropical curve */ 132 132 // gfan::ZFan* zf = toFanStar(C); 133 // std::cout << zf->toString( );133 // std::cout << zf->toString(2+4+8+128) << std::endl; 134 134 // delete zf; 135 135 for (std::set<gfan::ZCone>::iterator zc=C.begin(); zc!=C.end();) … … 137 137 gfan::ZVector w = zc->getRelativeInteriorPoint(); 138 138 gfan::ZMatrix W = zc->generatorsOfSpan(); 139 // std::cout << zc->extremeRays() << std::endl; 139 140 140 141 ring s = genericlyWeightedOrdering(r,u,w,W,currentStrategy); … … 148 149 149 150 poly mons = currentStrategy.checkInitialIdealForMonomial(ininIs,s,w); 150 // poly mons = checkForMonomialViaSuddenSaturation(ininIs,s);151 151 if (mons) 152 152 { 153 // std::cout << "computing witness in tropical star!" << std::endl; 153 154 poly gs = witness(mons,inIsSTD,ininIs,s); 154 155 C = intersect(C,tropicalVariety(gs,s,currentStrategy),d); … … 161 162 zc = C.begin(); 162 163 // gfan::ZFan* zf = toFanStar(C); 163 // std::cout << zf->toString( );164 // std::cout << zf->toString(2+4+8+128) << std::endl; 164 165 // delete zf; 165 166 id_Delete(&inIs,s); … … 170 171 else 171 172 { 172 gfan::ZVector wNeg = -w; 173 id_Delete(&inIs,s); 174 id_Delete(&inIsSTD,s); 175 id_Delete(&ininIs,s); 176 rDelete(s); 177 178 gfan::ZVector wNeg = currentStrategy.negateWeight(w); 173 179 if (zc->contains(wNeg)) 174 180 { … … 183 189 184 190 mons = currentStrategy.checkInitialIdealForMonomial(ininIs,s,wNeg); 185 // mons = checkForMonomialViaSuddenSaturation(ininIs,s);186 191 if (mons) 187 192 { … … 217 222 { 218 223 std::set<gfan::ZCone> C = tropicalStar(I,r,u,currentStrategy); 219 gfan::ZFan* zf = toFanStar(C);224 // gfan::ZFan* zf = toFanStar(C); 220 225 // std::cout << zf->toString(); 221 delete zf;226 // delete zf; 222 227 gfan::ZMatrix raysOfC(0,u.size()); 223 228 if (!currentStrategy.restrictToLowerHalfSpace()) -
Singular/dyn_modules/gfanlib/tropicalStrategy.h
r08749da rff48aa 259 259 } 260 260 261 gfan::ZVector negateWeight(const gfan::ZVector w) const 262 { 263 gfan::ZVector wNeg(w.size()); 264 265 if (this->isValuationNonTrivial()) 266 { 267 wNeg[0]=w[0]; 268 for (int i=1; i<w.size(); i++) 269 wNeg[i]=w[i]; 270 } 271 else 272 wNeg = -w; 273 274 return wNeg; 275 } 276 261 277 /** 262 278 * If valuation trivial, returns a copy of r with a positive weight prepended, -
Singular/dyn_modules/gfanlib/tropicalVariety.cc
r08749da rff48aa 42 42 BOOLEAN tropicalVariety(leftv res, leftv args) 43 43 { 44 omUpdateInfo();45 Print("usedBytesAfter=%ld\n",om_Info.UsedBytes);46 44 leftv u = args; 47 45 if ((u!=NULL) && (u->Typ()==IDEAL_CMD)) … … 113 111 stdI = id_Copy(I,currRing); 114 112 tropicalStrategy currentStrategy(stdI,p,currRing); 113 // tropicalStrategy currentStrategy(I,p,currRing); 115 114 gfan::ZFan* tropI = tropicalVariety(currentStrategy); 116 115 res->rtyp = fanID;
Note: See TracChangeset
for help on using the changeset viewer.