My Project
Toggle main menu visibility
Loading...
Searching...
No Matches
kernel
digitech.cc
Go to the documentation of this file.
1
/****************************************
2
* Computer Algebra System SINGULAR *
3
****************************************/
4
5
6
7
#include "
kernel/mod2.h
"
8
#include "
polys/monomials/ring.h
"
9
10
#include "
kernel/digitech.h
"
11
#include "
polys/kbuckets.h
"
12
#include "
kernel/ideals.h
"
13
STATIC_INST_VAR
ideal
zero_ideal
;
14
15
void
bit_reduce
(poly &
f
,ring r)
16
{
17
poly
p
=
f
;
18
kBucket_pt
erg_bucket=
kBucketCreate
(r);
19
kBucketInit
(erg_bucket,
NULL
,0
/*pLength(P.p)*/
);
20
while
(
p
)
21
{
22
poly
next
=
pNext
(
p
);
23
pNext
(
p
)=
NULL
;
24
25
int
i
;
26
int
max
=rVar(r);
27
for
(
i
=1;
i
<=
max
;
i
++)
28
{
29
unsigned
long
exp
=p_GetExp(
p
,
i
,r);
30
if
(
exp
!=0)
31
p_SetExp(
p
,
i
,1,r);
32
33
}
34
p_Setm(
p
,r);
35
int
pseudo_len=0;
36
kBucket_Add_q
(erg_bucket,
p
,&pseudo_len);
37
p
=
next
;
38
}
39
40
int
len=0;
41
poly erg;
42
kBucketClear
(erg_bucket,&erg, &len);
43
kBucketDestroy
(&erg_bucket);
44
f
=erg;
45
}
46
47
poly
uni_subst_bits
(poly outer_uni, poly inner_multi, ring r)
48
{
49
zero_ideal
=
idInit
(0,1);
50
//assumes outer_uni is univariate and ordering global
51
int
d_max=p_GetExp(outer_uni,1,r);
52
poly* potences=(poly*)
omAlloc
((d_max+1)*
sizeof
(poly));
53
potences[0]=
p_ISet
(1,r);
54
int
i
;
55
for
(
i
=1;
i
<=d_max;
i
++)
56
{
57
potences[
i
]=pp_Mult_qq(potences[
i
-1],inner_multi,r);
58
bit_reduce
(potences[
i
],r);
59
}
60
61
poly
p
=outer_uni;
62
kBucket_pt
erg_bucket=
kBucketCreate
(r);
63
kBucketInit
(erg_bucket,
NULL
,0
/*pLength(P.p)*/
);
64
65
66
while
(
p
)
67
{
68
int
d=p_GetExp(
p
,1,r);
69
assume
(potences[d]!=
NULL
);
//mustn't always hold, but for most input
70
int
pseudo_len=0;
71
kBucket_Add_q
(erg_bucket,p_Mult_nn(potences[d],
p_GetCoeff
(
p
,r),r),&pseudo_len);
72
potences[d]=
NULL
;
73
p
=
pNext
(
p
);
74
}
75
76
//free potences
77
for
(
i
=0;
i
<=d_max;
i
++)
78
{
79
p_Delete(&potences[
i
],r);
80
}
81
omfree
(potences);
82
int
len=0;
83
poly erg;
84
kBucketClear
(erg_bucket,&erg, &len);
85
kBucketDestroy
(&erg_bucket);
86
return
(erg);
87
}
i
int i
Definition
cfEzgcd.cc:132
p
int p
Definition
cfModGcd.cc:4086
f
FILE * f
Definition
checklibs.c:9
uni_subst_bits
poly uni_subst_bits(poly outer_uni, poly inner_multi, ring r)
Definition
digitech.cc:47
bit_reduce
void bit_reduce(poly &f, ring r)
Definition
digitech.cc:15
zero_ideal
STATIC_INST_VAR ideal zero_ideal
Definition
digitech.cc:13
digitech.h
STATIC_INST_VAR
#define STATIC_INST_VAR
Definition
globaldefs.h:10
ideals.h
next
ListNode * next
Definition
janet.h:31
kBucketClear
void kBucketClear(kBucket_pt bucket, poly *p, int *length)
Definition
kbuckets.cc:521
kBucketDestroy
void kBucketDestroy(kBucket_pt *bucket_pt)
Definition
kbuckets.cc:216
kBucketInit
void kBucketInit(kBucket_pt bucket, poly lm, int length)
Definition
kbuckets.cc:493
kBucketCreate
kBucket_pt kBucketCreate(const ring bucket_ring)
Creation/Destruction of buckets.
Definition
kbuckets.cc:209
kBucket_Add_q
void kBucket_Add_q(kBucket_pt bucket, poly q, int *l)
Add to Bucket a poly ,i.e. Bpoly == q+Bpoly.
Definition
kbuckets.cc:660
kbuckets.h
mod2.h
assume
#define assume(x)
Definition
mod2.h:389
pNext
#define pNext(p)
Definition
monomials.h:36
p_GetCoeff
#define p_GetCoeff(p, r)
Definition
monomials.h:50
max
gmp_float max(const gmp_float &a, const gmp_float &b)
Definition
mpr_complex.cc:354
exp
gmp_float exp(const gmp_float &a)
Definition
mpr_complex.cc:349
omfree
#define omfree(addr)
Definition
omAllocDecl.h:237
omAlloc
#define omAlloc(size)
Definition
omAllocDecl.h:210
NULL
#define NULL
Definition
omList.c:12
p_ISet
poly p_ISet(long i, const ring r)
returns the poly representing the integer i
Definition
p_polys.cc:1298
ring.h
kBucket_pt
kBucket * kBucket_pt
Definition
ring.h:26
idInit
ideal idInit(int idsize, int rank)
initialise an ideal / module
Definition
simpleideals.cc:35
Generated on
for My Project by
doxygen 1.18.0
for
Singular