Data Structures | Typedefs | Functions
tropicalVarietyOfPolynomials.h File Reference
#include <gfanlib/gfanlib.h>
#include <polys/monomials/p_polys.h>
#include <set>
#include <tropicalStrategy.h>
#include <Singular/subexpr.h>
#include <bbfan.h>

Go to the source code of this file.

Data Structures

struct  ZConeCompareDimensionFirst
 

Typedefs

typedef std::set< gfan::ZCone, ZConeCompareDimensionFirstZConesSortedByDimension
 

Functions

std::set< gfan::ZCone > tropicalVariety (const poly g, const ring r, const tropicalStrategy *currentCase)
 
ZConesSortedByDimension tropicalVarietySortedByDimension (const poly g, const ring r, const tropicalStrategy *currentCase)
 
BOOLEAN tropicalVariety00 (leftv res, leftv args)
 
BOOLEAN tropicalVariety01 (leftv res, leftv args)
 

Typedef Documentation

typedef std::set<gfan::ZCone,ZConeCompareDimensionFirst> ZConesSortedByDimension

Definition at line 28 of file tropicalVarietyOfPolynomials.h.

Function Documentation

std::set<gfan::ZCone> tropicalVariety ( const poly  g,
const ring  r,
const tropicalStrategy currentCase 
)

Definition at line 21 of file tropicalVarietyOfPolynomials.cc.

22 {
23  int n = rVar(r);
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 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
static void p_GetExpV(poly p, int *ev, const ring r)
Definition: p_polys.h:1448
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
static short rVar(const ring r)
#define rVar(r) (r->N)
Definition: ring.h:540
g
Definition: cfModGcd.cc:4031
int k
Definition: cfEzgcd.cc:93
#define omAlloc(size)
Definition: omAllocDecl.h:210
#define pIter(p)
Definition: monomials.h:44
BOOLEAN inequalities(leftv res, leftv args)
Definition: bbcone.cc:527
const ring r
Definition: syzextra.cc:208
int j
Definition: myNF.cc:70
gfan::ZVector intStar2ZVector(const int d, const int *i)
int i
Definition: cfEzgcd.cc:123
bool restrictToLowerHalfSpace() const
returns true, if valuation non-trivial, false otherwise
polyrec * poly
Definition: hilb.h:10
int l
Definition: cfEzgcd.cc:94
BOOLEAN tropicalVariety00 ( leftv  res,
leftv  args 
)
BOOLEAN tropicalVariety01 ( leftv  res,
leftv  args 
)
ZConesSortedByDimension tropicalVarietySortedByDimension ( const poly  g,
const ring  r,
const tropicalStrategy currentCase 
)

Definition at line 63 of file tropicalVarietyOfPolynomials.cc.

64 {
65  int n = rVar(r);
67  if (g && g->next)
68  {
69  int* expv = (int*) omAlloc((n+1)*sizeof(int));
70  gfan::ZMatrix exponents = gfan::ZMatrix(0,n);
71  for (poly s=g; s; pIter(s))
72  {
73  p_GetExpV(s,expv,r);
74  gfan::ZVector zv = intStar2ZVector(n,expv);
75  exponents.appendRow(intStar2ZVector(n,expv));
76  }
77  omFreeSize(expv,(n+1)*sizeof(int));
78 
79  int l = exponents.getHeight();
80  gfan::ZVector lowerHalfSpaceCondition = gfan::ZVector(n);
81  lowerHalfSpaceCondition[0] = -1;
82  for (int i=0; i<l; i++)
83  {
84  for (int j=i+1; j<l; j++)
85  {
86  gfan::ZMatrix equation = gfan::ZMatrix(0,n);
87  equation.appendRow(exponents[i]-exponents[j]);
88  gfan::ZMatrix inequalities = gfan::ZMatrix(0,n);
89  if (currentCase->restrictToLowerHalfSpace())
90  inequalities.appendRow(lowerHalfSpaceCondition);
91  for (int k=0; k<l; k++)
92  if (k!=i && k!=j) inequalities.appendRow(exponents[i]-exponents[k]);
93  gfan::ZCone zc = gfan::ZCone(inequalities,equation);
94  if (zc.dimension()>=n-1)
95  {
96  zc.canonicalize();
97  tropVar.insert(zc);
98  }
99  }
100  }
101  }
102  return tropVar;
103 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
static void p_GetExpV(poly p, int *ev, const ring r)
Definition: p_polys.h:1448
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
static short rVar(const ring r)
#define rVar(r) (r->N)
Definition: ring.h:540
g
Definition: cfModGcd.cc:4031
int k
Definition: cfEzgcd.cc:93
#define omAlloc(size)
Definition: omAllocDecl.h:210
#define pIter(p)
Definition: monomials.h:44
BOOLEAN inequalities(leftv res, leftv args)
Definition: bbcone.cc:527
const ring r
Definition: syzextra.cc:208
std::set< gfan::ZCone, ZConeCompareDimensionFirst > ZConesSortedByDimension
int j
Definition: myNF.cc:70
gfan::ZVector intStar2ZVector(const int d, const int *i)
int i
Definition: cfEzgcd.cc:123
bool restrictToLowerHalfSpace() const
returns true, if valuation non-trivial, false otherwise
polyrec * poly
Definition: hilb.h:10
int l
Definition: cfEzgcd.cc:94