Changeset 44d34b6 in git


Ignore:
Timestamp:
Feb 1, 2015, 10:01:06 PM (9 years ago)
Author:
Yue Ren <ren@…>
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
Message:
chg: possible speedup?
Location:
Singular/dyn_modules/gfanlib
Files:
4 edited

Legend:

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

    r670e639 r44d34b6  
    1010#include <tropicalStrategy.h>
    1111#include <tropicalVarietyOfPolynomials.h>
     12#include <tropicalCurves.h>
    1213#include <set>
    1314#ifndef NDEBUG
     
    2021 * and throws away those of lower dimension than d.
    2122 **/
    22 static std::set<gfan::ZCone> intersect(const std::set<gfan::ZCone> setA,
    23                                        const std::set<gfan::ZCone> setB,
    24                                        int d=0)
     23static ZConesSortedByDimension intersect(const ZConesSortedByDimension &setA,
     24                                         const ZConesSortedByDimension &setB,
     25                                         int d=0)
    2526{
    2627  if (setA.empty())
     
    2829  if (setB.empty())
    2930    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++)
    3435    {
    3536      gfan::ZCone coneOfIntersection = gfan::intersection(*coneOfA,*coneOfB);
     
    111112 * the initial ideal inI with respect to it, computes the star of the tropical variety in u.
    112113 **/
    113 std::set<gfan::ZCone> tropicalStar(ideal &inI, const ring &r, const gfan::ZVector &u,
    114                                    const tropicalStrategy* currentStrategy)
     114ZConesSortedByDimension tropicalStar(ideal inI, const ring r, const gfan::ZVector &u,
     115                                     const tropicalStrategy* currentStrategy)
    115116{
    116117  int k = idSize(inI);
     
    119120  /* Compute the common refinement over all tropical varieties
    120121   * 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);
    122123  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);
    124125
    125126  /* Cycle through all maximal cones of the refinement.
     
    153154      // std::cout << "computing witness in tropical star!" << std::endl;
    154155      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);
    156157      nMapFunc mMap = n_SetMap(s->cf,r->cf);
    157158      poly gr = p_PermPoly(gs,NULL,s,r,mMap,NULL,0);
     
    192193        {
    193194          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);
    195196          nMapFunc mMap = n_SetMap(s->cf,r->cf);
    196197          poly gr = p_PermPoly(gs,NULL,s,r,mMap,NULL,0);
     
    219220
    220221
    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);
     222gfan::ZMatrix raysOfTropicalStar(ideal I, const ring r, const gfan::ZVector &u, const tropicalStrategy* currentStrategy)
     223{
     224  ZConesSortedByDimension C = tropicalStar(I,r,u,currentStrategy);
    224225  // gfan::ZFan* zf = toFanStar(C);
    225226  // std::cout << zf->toString();
     
    228229  if (!currentStrategy->restrictToLowerHalfSpace())
    229230  {
    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++)
    231232    {
    232233      assume(zc->dimensionOfLinealitySpace()+1 == zc->dimension());
     
    237238  else
    238239  {
    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++)
    240241    {
    241242      assume(zc->dimensionOfLinealitySpace()+2 == zc->dimension());
     
    266267      tropicalStrategy currentCase(inI,currRing);
    267268      gfan::ZVector* v = bigintmatToZVector(u);
    268       std::set<gfan::ZCone> C = tropicalStar(inI,currRing,*v,&currentCase);
     269      ZConesSortedByDimension C = tropicalStar(inI,currRing,*v,&currentCase);
    269270      id_Delete(&inI,currRing);
    270271      delete u;
    271272      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);
    274277      return FALSE;
    275278    }
  • Singular/dyn_modules/gfanlib/tropicalCurves.h

    r670e639 r44d34b6  
    66#include <libpolys/polys/monomials/p_polys.h>
    77#include <tropicalStrategy.h>
     8#include <tropicalVarietyOfPolynomials.h>
    89
    9 std::set<gfan::ZCone> tropicalStar(const ideal I, const ring r, const gfan::ZVector u,
    10                                    const tropicalStrategy* currentStrategy);
    11 gfan::ZMatrix raysOfTropicalStar(ideal I, const ring r, const gfan::ZVector u,
     10ZConesSortedByDimension tropicalStar(const ideal I, const ring r, const gfan::ZVector &u,
     11                                     const tropicalStrategy* currentStrategy);
     12gfan::ZMatrix raysOfTropicalStar(ideal I, const ring r, const gfan::ZVector &u,
    1213                                 const tropicalStrategy* currentStrategy);
    1314
  • Singular/dyn_modules/gfanlib/tropicalVarietyOfPolynomials.cc

    r670e639 r44d34b6  
    55
    66#include <tropicalStrategy.h>
     7#include <tropicalVarietyOfPolynomials.h>
    78
    89#ifndef NDEBUG
     
    2223  int n = rVar(r);
    2324  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
     63ZConesSortedByDimension tropicalVarietySortedByDimension(const poly g, const ring r, const tropicalStrategy* currentCase)
     64{
     65  int n = rVar(r);
     66  ZConesSortedByDimension tropVar;
    2467  if (g && g->next)
    2568  {
  • Singular/dyn_modules/gfanlib/tropicalVarietyOfPolynomials.h

    r670e639 r44d34b6  
    1313#endif
    1414
     15struct 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
     28typedef std::set<gfan::ZCone,ZConeCompareDimensionFirst> ZConesSortedByDimension;
     29
    1530std::set<gfan::ZCone> tropicalVariety(const poly g, const ring r, const tropicalStrategy* currentCase);
     31ZConesSortedByDimension tropicalVarietySortedByDimension(const poly g, const ring r, const tropicalStrategy* currentCase);
    1632
    1733#ifndef NDEBUG
Note: See TracChangeset for help on using the changeset viewer.