My Project
Loading...
Searching...
No Matches
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
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}
int l
Definition cfEzgcd.cc:100
int m
Definition cfEzgcd.cc:128
int i
Definition cfEzgcd.cc:132
int k
Definition cfEzgcd.cc:99
int p
Definition cfModGcd.cc:4086
g
Definition cfModGcd.cc:4098
b *CanonicalForm B
Definition facBivar.cc:52
int j
Definition facHensel.cc:110
#define D(A)
Definition gentable.cc:128
@ IDEAL_CMD
Definition grammar.cc:285
#define idDelete(H)
delete an ideal
Definition ideals.h:29
VAR omBin slists_bin
Definition lists.cc:23
matrix mpNew(int r, int c)
create a r x c zero-matrix
Definition matpol.cc:37
#define MATELEM(mat, i, j)
1-based access to matrix
Definition matpol.h:29
ip_smatrix * matrix
Definition matpol.h:43
#define MATROWS(i)
Definition matpol.h:26
#define MATCOLS(i)
Definition matpol.h:27
#define pIter(p)
Definition monomials.h:37
#define pNext(p)
Definition monomials.h:36
slists * lists
#define omAllocBin(bin)
#define NULL
Definition omList.c:12
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition polys.cc:13
#define pAdd(p, q)
Definition polys.h:204
#define pDelete(p_ptr)
Definition polys.h:187
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL
Definition polys.h:68
#define pSetm(p)
Definition polys.h:272
#define ppMult_mm(p, m)
Definition polys.h:202
#define pDiff(a, b)
Definition polys.h:297
#define pSub(a, b)
Definition polys.h:288
#define pDivideM(a, b)
Definition polys.h:295
#define pIncrExp(p, i)
Definition polys.h:44
#define pLmDivisibleBy(a, b)
like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL
Definition polys.h:141
#define pGetExp(p, i)
Exponent.
Definition polys.h:42
#define pNormalize(p)
Definition polys.h:318
#define pWTotaldegree(p)
Definition polys.h:284
ideal idInit(int idsize, int rank)
initialise an ideal / module
void id_Normalize(ideal I, const ring r)
normialize all polys in id
#define IDELEMS(i)

◆ 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 TRUE
Definition auxiliary.h:101
#define FALSE
Definition auxiliary.h:97
CanonicalForm res
Definition facAbsFact.cc:60
void WerrorS(const char *s)
Definition feFopen.cc:24
lists gmsNF(ideal p, ideal g, matrix B, int D, int K)
Definition gms.cc:22
@ MATRIX_CMD
Definition grammar.cc:287
VAR idhdl currRingHdl
Definition ipid.cc:57
STATIC_VAR Poly * h
Definition janet.cc:971
@ LIST_CMD
Definition tok.h:118
@ INT_CMD
Definition tok.h:96