Functions
gms.cc File Reference
#include "kernel/mod2.h"
#include "gms.h"
#include "coeffs/numbers.h"
#include "kernel/polys.h"
#include "ipid.h"

Go to the source code of this file.

Functions

lists gmsNF (ideal p, ideal g, matrix B, int D, int K)
 
BOOLEAN gmsNF (leftv res, leftv h)
 

Function Documentation

◆ gmsNF() [1/2]

lists gmsNF ( ideal  p,
ideal  g,
matrix  B,
int  D,
int  K 
)

Definition at line 22 of file gms.cc.

23 {
24  ideal r=idInit(IDELEMS(p),1);
25  ideal q=idInit(IDELEMS(p),1);
26 
27  matrix B0=mpNew(MATROWS(B),MATCOLS(B));
28  for(int i=1;i<=MATROWS(B0);i++)
29  for(int j=1;j<=MATCOLS(B0);j++)
30  if(MATELEM(B,i,j)!=NULL)
31  MATELEM(B0,i,j)=pDiff(MATELEM(B,i,j),i+1);
32 
33  for(int k=0;k<IDELEMS(p);k++)
34  {
35  while(p->m[k]!=NULL&&pGetExp(p->m[k],1)<=K)
36  {
37  int j=0;
38  while(j<IDELEMS(g)&&!pLmDivisibleBy(g->m[j],p->m[k]))
39  j++;
40 
41  if(j<IDELEMS(g))
42  {
43  poly m=pDivideM(pHead(p->m[k]),pHead(g->m[j]));
44  p->m[k]=pSub(p->m[k],ppMult_mm(g->m[j],m));
45  pIncrExp(m,1);
46  pSetm(m);
47  for(int i=0;i<MATROWS(B);i++)
48  {
49  poly m0=pDiff(m,i+2);
50  if(MATELEM(B0,i+1,j+1)!=NULL)
51  p->m[k]=pAdd(p->m[k],ppMult_mm(MATELEM(B0,i+1,j+1),m));
52  if(MATELEM(B,i+1,j+1)!=NULL&&m0!=NULL)
53  p->m[k]=pAdd(p->m[k],ppMult_mm(MATELEM(B,i+1,j+1),m0));
54  pDelete(&m0);
55  }
56  pDelete(&m);
57  }
58  else
59  {
60  poly p0=p->m[k];
61  pIter(p->m[k]);
62  pNext(p0)=NULL;
63  r->m[k]=pAdd(r->m[k],p0);
64  }
65 
66  while(p->m[k]!=NULL&&pGetExp(p->m[k],1)<=K&&pWTotaldegree(p->m[k])>D)
67  {
68  int i=pGetExp(p->m[k],1);
69  do
70  {
71  poly p0=p->m[k];
72  pIter(p->m[k]);
73  pNext(p0)=NULL;
74  q->m[k]=pAdd(q->m[k],p0);
75  }while(p->m[k]!=NULL&&pGetExp(p->m[k],1)==i);
76  }
77 
78  pNormalize(p->m[k]);
79  }
80 
81  q->m[k]=pAdd(q->m[k],p->m[k]);
82  p->m[k]=NULL;
83  }
84  idDelete(&p);
85  idDelete((ideal *)&B0);
86 
89 
91  l->Init(2);
92 
93  l->m[0].rtyp=IDEAL_CMD;
94  l->m[0].data=r;
95  l->m[1].rtyp=IDEAL_CMD;
96  l->m[1].data=q;
97 
98  return l;
99 }
#define omAllocBin(bin)
Definition: omAllocDecl.h:205
void id_Normalize(ideal I, const ring r)
normialize all polys in id
sleftv * m
Definition: lists.h:46
int j
Definition: facHensel.cc:105
#define D(A)
Definition: gentable.cc:131
#define pSetm(p)
Definition: polys.h:267
#define pAdd(p, q)
Definition: polys.h:199
#define idDelete(H)
delete an ideal
Definition: ideals.h:29
Definition: lists.h:23
#define ppMult_mm(p, m)
Definition: polys.h:197
VAR omBin slists_bin
Definition: lists.cc:23
g
Definition: cfModGcd.cc:4031
int k
Definition: cfEzgcd.cc:92
#define pLmDivisibleBy(a, b)
like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL
Definition: polys.h:140
void * data
Definition: subexpr.h:88
#define pIter(p)
Definition: monomials.h:37
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:13
#define pGetExp(p, i)
Exponent.
Definition: polys.h:41
#define pIncrExp(p, i)
Definition: polys.h:43
#define pSub(a, b)
Definition: polys.h:283
#define pDivideM(a, b)
Definition: polys.h:290
int m
Definition: cfEzgcd.cc:121
int i
Definition: cfEzgcd.cc:125
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL ...
Definition: polys.h:67
#define IDELEMS(i)
Definition: simpleideals.h:23
INLINE_THIS void Init(int l=0)
matrix mpNew(int r, int c)
create a r x c zero-matrix
Definition: matpol.cc:37
ideal idInit(int idsize, int rank)
initialise an ideal / module
Definition: simpleideals.cc:35
#define MATCOLS(i)
Definition: matpol.h:27
#define NULL
Definition: omList.c:12
slists * lists
Definition: mpr_numeric.h:146
#define pWTotaldegree(p)
Definition: polys.h:279
#define pDelete(p_ptr)
Definition: polys.h:182
int rtyp
Definition: subexpr.h:91
#define pNext(p)
Definition: monomials.h:36
#define pDiff(a, b)
Definition: polys.h:292
#define MATROWS(i)
Definition: matpol.h:26
int p
Definition: cfModGcd.cc:4019
int l
Definition: cfEzgcd.cc:93
#define MATELEM(mat, i, j)
1-based access to matrix
Definition: matpol.h:29
#define pNormalize(p)
Definition: polys.h:313

◆ gmsNF() [2/2]

BOOLEAN gmsNF ( leftv  res,
leftv  h 
)

Definition at line 102 of file gms.cc.

103 {
104  if(currRingHdl)
105  {
106  if(h&&h->Typ()==IDEAL_CMD)
107  {
108  ideal p=(ideal)h->CopyD();
109  h=h->next;
110  if(h&&h->Typ()==IDEAL_CMD)
111  {
112  ideal g=(ideal)h->Data();
113  h=h->next;
114  if(h&&h->Typ()==MATRIX_CMD)
115  {
116  matrix B=(matrix)h->Data();
117  h=h->next;
118  if(h&&h->Typ()==INT_CMD)
119  {
120  int D=(int)(long)h->Data();
121  h=h->next;
122  if(h&&h->Typ()==INT_CMD)
123  {
124  int K=(int)(long)h->Data();
125  res->rtyp=LIST_CMD;
126  res->data=(void *)gmsNF(p,g,B,D,K);
127  return FALSE;
128  }
129  }
130  }
131  }
132  }
133  WerrorS("<ideal>,<ideal>,<matrix>,<int>,<int> expected");
134  return TRUE;
135  }
136  WerrorS("no ring active");
137  return TRUE;
138 }
#define D(A)
Definition: gentable.cc:131
Definition: tok.h:96
#define FALSE
Definition: auxiliary.h:96
#define TRUE
Definition: auxiliary.h:100
g
Definition: cfModGcd.cc:4031
void WerrorS(const char *s)
Definition: feFopen.cc:24
int Typ()
Definition: subexpr.cc:1033
void * data
Definition: subexpr.h:88
leftv next
Definition: subexpr.h:86
b *CanonicalForm B
Definition: facBivar.cc:52
int rtyp
Definition: subexpr.h:91
void * Data()
Definition: subexpr.cc:1176
Definition: tok.h:118
lists gmsNF(ideal p, ideal g, matrix B, int D, int K)
Definition: gms.cc:22
int p
Definition: cfModGcd.cc:4019
VAR idhdl currRingHdl
Definition: ipid.cc:59
ip_smatrix * matrix
Definition: matpol.h:43
void * CopyD(int t)
Definition: subexpr.cc:739