Changeset dffd154 in git for Singular/dyn_modules/gfanlib/tropicalStrategy.cc
- Timestamp:
- Sep 20, 2014, 1:53:38 AM (10 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 4664b33f793e7e511d9722557720dd523ec89856
- Parents:
- b71400abefd0c9c66c0009063f40ddd5b1f1c4c7
- git-author:
- Yue Ren <ren@mathematik.uni-kl.de>2014-09-20 01:53:38+02:00
- git-committer:
- Yue Ren <ren@mathematik.uni-kl.de>2015-02-06 13:47:05+01:00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/dyn_modules/gfanlib/tropicalStrategy.cc
rb71400a rdffd154 9 9 #include <kernel/ideals.h> 10 10 #include <kernel/GBEngine/stairc.h> 11 #include <kernel/GBEngine/kstd1.h> 11 12 #include <Singular/ipshell.h> // for isPrime(int i) 12 13 … … 48 49 * Initializes all relevant structures and information for the trivial valuation case, 49 50 * i.e. computing a tropical variety without any valuation. 50 *g51 51 */ 52 52 tropicalStrategy::tropicalStrategy(const ideal I, const ring r, … … 67 67 { 68 68 assume(rField_is_Q(r) || rField_is_Zp(r)); 69 startingIdeal = gfanlib_kStd_wrapper(startingIdeal,startingRing);70 69 if (!completelyHomogeneous) 71 70 { … … 127 126 } 128 127 return rCopy(r); 128 } 129 130 static ideal constructStartingIdeal(ideal originalIdeal, ring originalRing, number uniformizingParameter, ring startingRing) 131 { 132 // construct p-t 133 poly g = p_One(startingRing); 134 p_SetCoeff(g,uniformizingParameter,startingRing); 135 pNext(g) = p_One(startingRing); 136 p_SetExp(pNext(g),1,1,startingRing); 137 p_SetCoeff(pNext(g),n_Init(-1,startingRing->cf),startingRing); 138 p_Setm(pNext(g),startingRing); 139 ideal pt = idInit(1); 140 pt->m[0] = g; 141 142 // map originalIdeal from originalRing into startingRing 143 int k = idSize(originalIdeal); 144 ideal J = idInit(k+1); 145 nMapFunc nMap = n_SetMap(originalRing->cf,startingRing->cf); 146 int n = rVar(originalRing); 147 int* shiftByOne = (int*) omAlloc((n+1)*sizeof(int)); 148 for (int i=1; i<=n; i++) 149 shiftByOne[i]=i+1; 150 for (int i=0; i<k; i++) 151 J->m[i] = p_PermPoly(originalIdeal->m[i],shiftByOne,originalRing,startingRing,nMap,NULL,0); 152 omFreeSize(shiftByOne,(n+1)*sizeof(int)); 153 154 ring origin = currRing; 155 rChangeCurrRing(startingRing); 156 ideal startingIdeal = kNF(pt,startingRing->qideal,J); 157 rChangeCurrRing(origin); 158 assume(startingIdeal->m[k]==NULL); 159 startingIdeal->m[k] = pt->m[0]; 160 startingIdeal = gfanlib_kStd_wrapper(startingIdeal,startingRing); 161 162 id_Delete(&J,startingRing); 163 pt->m[0] = NULL; 164 id_Delete(&pt,startingRing); 165 return startingIdeal; 129 166 } 130 167 … … 149 186 /* assume that the ground field of the originalRing is Q */ 150 187 assume(rField_is_Q(s)); 151 originalRing = rCopy(s);152 188 153 189 /* replace Q with Z for the startingRing … … 160 196 161 197 /* map the input ideal into the new polynomial ring */ 162 int k = idSize(J); 163 startingIdeal = idInit(k+1); 164 poly g = p_One(startingRing); 165 p_SetCoeff(g,uniformizingParameter,startingRing); 166 pNext(g) = p_One(startingRing); 167 p_SetExp(pNext(g),1,1,startingRing); 168 p_SetCoeff(pNext(g),n_Init(-1,startingRing->cf),startingRing); 169 p_Setm(pNext(g),startingRing); 170 startingIdeal->m[0] = g; 171 int n = rVar(originalRing); 172 int* shiftByOne = (int*) omAlloc((n+1)*sizeof(int)); 173 for (int i=1; i<=n; i++) 174 shiftByOne[i]=i+1; 175 for (int i=0; i<k; i++) 176 startingIdeal->m[i+1] = p_PermPoly(J->m[i],shiftByOne,originalRing,startingRing,nMap,NULL,0); 177 omFreeSize(shiftByOne,(n+1)*sizeof(int)); 178 startingIdeal = gfanlib_kStd_wrapper(startingIdeal,startingRing); 198 startingIdeal = constructStartingIdeal(J,s,uniformizingParameter,startingRing); 179 199 180 200 linealitySpace = homogeneitySpace(startingIdeal,startingRing); … … 529 549 } 530 550 551 ideal tropicalStrategy::computeLift(const ideal inJs, const ring s, const ideal inIr, const ideal Ir, const ring r) const 552 { 553 int k = idSize(inJs); 554 ideal inJr = idInit(k); 555 nMapFunc identitysr = n_SetMap(s->cf,r->cf); 556 for (int i=0; i<k; i++) 557 inJr->m[i] = p_PermPoly(inJs->m[i],NULL,s,r,identitysr,NULL,0); 558 559 ideal Jr = getWitness(inJr,inIr,Ir,r); 560 nMapFunc identityrs = n_SetMap(r->cf,s->cf); 561 ideal Js = idInit(k); 562 for (int i=0; i<k; i++) 563 Js->m[i] = p_PermPoly(Jr->m[i],NULL,r,s,identityrs,NULL,0); 564 return Js; 565 } 566 531 567 static void deleteOrdering(ring r) 532 568 { … … 610 646 } 611 647 612 613 std::pair<ideal,ring> tropicalStrategy::getFlip(const ideal I, const ideal redI, const ring r, 648 std::pair<ideal,ring> tropicalStrategy::getFlip(const ideal Ir, const ring r, 614 649 const gfan::ZVector interiorPoint, 615 650 const gfan::ZVector facetNormal) const 616 651 { 617 652 assume(isValuationTrivial() || interiorPoint[0].sign()<0); 618 assume(checkForUniformizingBinomial(I ,r));653 assume(checkForUniformizingBinomial(Ir,r)); 619 654 620 655 // get a generating system of the initial ideal 621 656 // and compute a standard basis with respect to adjacent ordering 622 ideal inIr = initial( redI,r,interiorPoint);657 ideal inIr = initial(Ir,r,interiorPoint); 623 658 ring sAdjusted = copyAndChangeOrderingWP(r,interiorPoint,facetNormal); 624 659 nMapFunc identity = n_SetMap(r->cf,sAdjusted->cf); 625 int k = idSize(I ); ideal inIsAdjusted = idInit(k);660 int k = idSize(Ir); ideal inIsAdjusted = idInit(k); 626 661 for (int i=0; i<k; i++) 627 662 inIsAdjusted->m[i] = p_PermPoly(inIr->m[i],NULL,r,sAdjusted,identity,NULL,0); … … 636 671 inJr->m[i] = p_PermPoly(inJsAdjusted->m[i],NULL,sAdjusted,r,identity,NULL,0); 637 672 638 ideal Jr = getWitness(inJr,inIr, redI,r);673 ideal Jr = getWitness(inJr,inIr,Ir,r); 639 674 ring s = copyAndChangeOrderingLS(r,interiorPoint,facetNormal); 640 675 identity = n_SetMap(r->cf,s->cf);
Note: See TracChangeset
for help on using the changeset viewer.