Ignore:
Timestamp:
Sep 20, 2014, 1:53:38 AM (10 years ago)
Author:
Yue Ren <ren@…>
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
Message:
chg: status update 20.09.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/dyn_modules/gfanlib/tropicalStrategy.cc

    rb71400a rdffd154  
    99#include <kernel/ideals.h>
    1010#include <kernel/GBEngine/stairc.h>
     11#include <kernel/GBEngine/kstd1.h>
    1112#include <Singular/ipshell.h> // for isPrime(int i)
    1213
     
    4849 * Initializes all relevant structures and information for the trivial valuation case,
    4950 * i.e. computing a tropical variety without any valuation.
    50  *g
    5151 */
    5252tropicalStrategy::tropicalStrategy(const ideal I, const ring r,
     
    6767{
    6868  assume(rField_is_Q(r) || rField_is_Zp(r));
    69   startingIdeal = gfanlib_kStd_wrapper(startingIdeal,startingRing);
    7069  if (!completelyHomogeneous)
    7170  {
     
    127126  }
    128127  return rCopy(r);
     128}
     129
     130static 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;
    129166}
    130167
     
    149186  /* assume that the ground field of the originalRing is Q */
    150187  assume(rField_is_Q(s));
    151   originalRing = rCopy(s);
    152188
    153189  /* replace Q with Z for the startingRing
     
    160196
    161197  /* 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);
    179199
    180200  linealitySpace = homogeneitySpace(startingIdeal,startingRing);
     
    529549}
    530550
     551ideal 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
    531567static void deleteOrdering(ring r)
    532568{
     
    610646}
    611647
    612 
    613 std::pair<ideal,ring> tropicalStrategy::getFlip(const ideal I, const ideal redI, const ring r,
     648std::pair<ideal,ring> tropicalStrategy::getFlip(const ideal Ir, const ring r,
    614649                                                const gfan::ZVector interiorPoint,
    615650                                                const gfan::ZVector facetNormal) const
    616651{
    617652  assume(isValuationTrivial() || interiorPoint[0].sign()<0);
    618   assume(checkForUniformizingBinomial(I,r));
     653  assume(checkForUniformizingBinomial(Ir,r));
    619654
    620655  // get a generating system of the initial ideal
    621656  // and compute a standard basis with respect to adjacent ordering
    622   ideal inIr = initial(redI,r,interiorPoint);
     657  ideal inIr = initial(Ir,r,interiorPoint);
    623658  ring sAdjusted = copyAndChangeOrderingWP(r,interiorPoint,facetNormal);
    624659  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);
    626661  for (int i=0; i<k; i++)
    627662    inIsAdjusted->m[i] = p_PermPoly(inIr->m[i],NULL,r,sAdjusted,identity,NULL,0);
     
    636671    inJr->m[i] = p_PermPoly(inJsAdjusted->m[i],NULL,sAdjusted,r,identity,NULL,0);
    637672
    638   ideal Jr = getWitness(inJr,inIr,redI,r);
     673  ideal Jr = getWitness(inJr,inIr,Ir,r);
    639674  ring s = copyAndChangeOrderingLS(r,interiorPoint,facetNormal);
    640675  identity = n_SetMap(r->cf,s->cf);
Note: See TracChangeset for help on using the changeset viewer.