My Project
Toggle main menu visibility
Loading...
Searching...
No Matches
Singular
dyn_modules
gfanlib
tropicalVarietyOfPolynomials.cc
Go to the documentation of this file.
1
#include "gfanlib/gfanlib.h"
2
#include "
polys/monomials/p_polys.h
"
3
#include "
callgfanlib_conversion.h
"
4
5
#include "
tropicalStrategy.h
"
6
#include "
tropicalVarietyOfPolynomials.h
"
7
8
#ifndef SING_NDEBUG
9
#include "
Singular/subexpr.h
"
// for leftv
10
#include "
bbfan.h
"
// for fanID
11
#endif
12
13
/***
14
* Returns the tropical variety of a polynomial g in ring r.
15
* Depending on the current case, it will compute either the whole tropical variety
16
* or just the part in the first lower half-space.
17
* An empty set means that the tropical Variety is the whole space,
18
* i.e. g is either 0 or a non-zero monomial.
19
**/
20
std::set<gfan::ZCone>
tropicalVariety
(
const
poly
g
,
const
ring r,
const
tropicalStrategy
* currentCase)
21
{
22
int
n =
rVar
(r);
23
std::set<gfan::ZCone> tropVar;
24
if
(
g
&&
g
->next)
25
{
26
int
* expv = (
int
*)
omAlloc
((n+1)*
sizeof
(
int
));
27
gfan::ZMatrix exponents = gfan::ZMatrix(0,n);
28
for
(poly
s
=
g
;
s
;
pIter
(
s
))
29
{
30
p_GetExpV
(
s
,expv,r);
31
gfan::ZVector zv =
intStar2ZVector
(n,expv);
32
exponents.appendRow(
intStar2ZVector
(n,expv));
33
}
34
omFreeSize
(expv,(n+1)*
sizeof
(
int
));
35
36
int
l
= exponents.getHeight();
37
gfan::ZVector lowerHalfSpaceCondition = gfan::ZVector(n);
38
lowerHalfSpaceCondition[0] = -1;
39
for
(
int
i
=0;
i
<
l
;
i
++)
40
{
41
for
(
int
j
=
i
+1;
j
<
l
;
j
++)
42
{
43
gfan::ZMatrix equation = gfan::ZMatrix(0,n);
44
equation.appendRow(exponents[
i
].toVector()-exponents[
j
].toVector());
45
gfan::ZMatrix
inequalities
= gfan::ZMatrix(0,n);
46
if
(currentCase->
restrictToLowerHalfSpace
())
47
inequalities
.appendRow(lowerHalfSpaceCondition);
48
for
(
int
k
=0;
k
<
l
;
k
++)
49
if
(
k
!=
i
&&
k
!=
j
)
inequalities
.appendRow(((gfan::ZVector)exponents[
i
])-exponents[
k
]);
50
gfan::ZCone zc = gfan::ZCone(
inequalities
,equation);
51
if
(zc.dimension()>=n-1)
52
{
53
zc.canonicalize();
54
tropVar.insert(zc);
55
}
56
}
57
}
58
}
59
return
tropVar;
60
}
61
62
ZConesSortedByDimension
tropicalVarietySortedByDimension
(
const
poly
g
,
const
ring r,
const
tropicalStrategy
* currentCase)
63
{
64
int
n =
rVar
(r);
65
ZConesSortedByDimension
tropVar;
66
if
(
g
&&
g
->next)
67
{
68
int
* expv = (
int
*)
omAlloc
((n+1)*
sizeof
(
int
));
69
gfan::ZMatrix exponents = gfan::ZMatrix(0,n);
70
for
(poly
s
=
g
;
s
;
pIter
(
s
))
71
{
72
p_GetExpV
(
s
,expv,r);
73
gfan::ZVector zv =
intStar2ZVector
(n,expv);
74
exponents.appendRow(
intStar2ZVector
(n,expv));
75
}
76
omFreeSize
(expv,(n+1)*
sizeof
(
int
));
77
78
int
l
= exponents.getHeight();
79
gfan::ZVector lowerHalfSpaceCondition = gfan::ZVector(n);
80
lowerHalfSpaceCondition[0] = -1;
81
for
(
int
i
=0;
i
<
l
;
i
++)
82
{
83
for
(
int
j
=
i
+1;
j
<
l
;
j
++)
84
{
85
gfan::ZMatrix equation = gfan::ZMatrix(0,n);
86
equation.appendRow(exponents[
i
].toVector()-exponents[
j
].toVector());
87
gfan::ZMatrix
inequalities
= gfan::ZMatrix(0,n);
88
if
(currentCase->
restrictToLowerHalfSpace
())
89
inequalities
.appendRow(lowerHalfSpaceCondition);
90
for
(
int
k
=0;
k
<
l
;
k
++)
91
if
(
k
!=
i
&&
k
!=
j
)
inequalities
.appendRow(exponents[
i
].toVector()-exponents[
k
].toVector());
92
gfan::ZCone zc = gfan::ZCone(
inequalities
,equation);
93
if
(zc.dimension()>=n-1)
94
{
95
zc.canonicalize();
96
tropVar.insert(zc);
97
}
98
}
99
}
100
}
101
return
tropVar;
102
}
103
104
105
// #ifndef SING_NDEBUG
106
// BOOLEAN tropicalVariety00(leftv res, leftv args)
107
// {
108
// leftv u = args;
109
// poly g = (poly) u->CopyD();
110
// omUpdateInfo();
111
// Print("usedBytesBefore=%ld\n",om_Info.UsedBytes);
112
// std::set<gfan::ZCone> C = fullTropicalVarietyOfPolynomial(g,currRing);
113
// p_Delete(&g,currRing);
114
// res->rtyp = fanID;
115
// res->data = (char*) toFanStar(C);
116
// return FALSE;
117
// }
118
// BOOLEAN tropicalVariety01(leftv res, leftv args)
119
// {
120
// leftv u = args;
121
// poly g = (poly) u->CopyD();
122
// omUpdateInfo();
123
// Print("usedBytesBefore=%ld\n",om_Info.UsedBytes);
124
// std::set<gfan::ZCone> C = lowerTropicalVarietyOfPolynomial(g,currRing);
125
// p_Delete(&g,currRing);
126
// res->rtyp = fanID;
127
// res->data = (char*) toFanStar(C);
128
// return FALSE;
129
// }
130
// #endif
inequalities
BOOLEAN inequalities(leftv res, leftv args)
Definition
bbcone.cc:560
bbfan.h
intStar2ZVector
gfan::ZVector intStar2ZVector(const int d, const int *i)
Definition
callgfanlib_conversion.cc:86
callgfanlib_conversion.h
l
int l
Definition
cfEzgcd.cc:100
i
int i
Definition
cfEzgcd.cc:132
k
int k
Definition
cfEzgcd.cc:99
g
g
Definition
cfModGcd.cc:4098
tropicalStrategy
Definition
tropicalStrategy.h:37
tropicalStrategy::restrictToLowerHalfSpace
bool restrictToLowerHalfSpace() const
returns true, if valuation non-trivial, false otherwise
Definition
tropicalStrategy.h:238
s
const CanonicalForm int s
Definition
facAbsFact.cc:51
j
int j
Definition
facHensel.cc:110
pIter
#define pIter(p)
Definition
monomials.h:37
omFreeSize
#define omFreeSize(addr, size)
Definition
omAllocDecl.h:260
omAlloc
#define omAlloc(size)
Definition
omAllocDecl.h:210
p_polys.h
p_GetExpV
static void p_GetExpV(poly p, int *ev, const ring r)
Definition
p_polys.h:1541
rVar
static short rVar(const ring r)
define rVar(r) (r->N)
Definition
ring.h:603
subexpr.h
tropicalStrategy.h
implementation of the class tropicalStrategy
tropicalVariety
std::set< gfan::ZCone > tropicalVariety(const poly g, const ring r, const tropicalStrategy *currentCase)
Definition
tropicalVarietyOfPolynomials.cc:20
tropicalVarietySortedByDimension
ZConesSortedByDimension tropicalVarietySortedByDimension(const poly g, const ring r, const tropicalStrategy *currentCase)
Definition
tropicalVarietyOfPolynomials.cc:62
tropicalVarietyOfPolynomials.h
ZConesSortedByDimension
std::set< gfan::ZCone, ZConeCompareDimensionFirst > ZConesSortedByDimension
Definition
tropicalVarietyOfPolynomials.h:27
Generated on
for My Project by
doxygen 1.17.0
for
Singular