Opened 15 years ago
Closed 14 years ago
#126 closed task (duplicate)
char 32003 (fast) vs. char 0 (slow); e.g. for std(jac)
Reported by: | seelisch | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | 3-1-1 |
Component: | dontKnow | Version: | |
Keywords: | Cc: | characteristic |
Description
Gert-Martin on March 29: Die folgende Anfrage aus dem Forum sollten wir ernst nehmen.
"... Ich habe festgestellt, dass std(jac) in char 0 grosse ganze Zahlen produziert. Die Rechnung in char 32003 geht schnell.
Also waere das Problem bei uns ebenfalls ohne Probleme zu loesen, wenn
- wir modulares std fuer lift verwenden koennten,
- slimgb bei lift anwenden koennten.
Frage,
- sollten wir zunaechst fuer wichtige Kernfunktionen wie lift, die relativ
einfach in einer Bibliothek mit all diesen Optionen zu realisieren waeren, LIBS schreiben?
- Sollen wir be einer Weiterentwicklung von Singular eine solche
Moeglichkeit auch im Kern vorsehen?
- Liegt das Problem beim Beipiel aus dem Forum wirklich an den langen Zahlen?
Wer kann das profilen?
Gert-Martin
I am trying to do some computations using polynomials over Q(t). But already the following hangs my machine:
ring R = (0,t), (w,x,y,z), dp; poly f = w3 + x3 + y3 + z3 + t*((w+x)*(w+2*y)*(w+3*z) + 3*x*y*(w+x+z)); ideal jac = jacob(f); print(lift(jac, x4));
By contrast, Magma does this with no trouble. Is this a known issue?
Similarly: Wieder ist Singular in char 32003 sehr schnell, in char 0 aber sehr langsam:
proc ImD(poly p) { return( ReD((-j)*p) ); } proc KonjMat?(matrix v) { return( subst(v,j,-j) ); } proc HermTr?(matrix v) { return( transpose(KonjMat?(v)) ); } proc UnInv?(matrix X) { def Y=HermTr?(X); ideal i=trace(X*X)/2,trace(X*Y),trace(X*X*X)/3,trace(X*X*Y), trace(X*X*Y*Y),trace(X*Y*X*X*Y*Y); ideal L=ReD(i[1]),ImD(i[1]),i[2],ReD(i[3]),ImD(i[3]), ReD(i[4]),ImD(i[4]),i[5],i[6]; return(L); } ring R=(0,j),(x,r,y,z,u,p,v,q),lp; minpoly=j2+1; matrix A[3][3]=2+3j,6,0, 0,1-3j,1, 4,0,-3; pmat(A); matrix B[3][3]=u+j*p,z,0, 0,v+j*q,x+j*r, y,0; B[3,3]=-trace(B); pmat(B); ideal iA=UnInv?(A); ideal iB=UnInv?(B); int m=size(iA); m; ideal jed=iB[1]-iA[1]; for(int i=2; i<=m ; i++ ) { jed=jed,iB[i]-iA[i]; } def s="ideal jed="+string(jed); size(s); ring S=0,(x,r,y,z,u,p,v,q),lp; ring S=32003,(x,r,y,z,u,p,v,q),lp; execute(s); size(jed); vdim(jed); option(prot); timer = 1; int tt=timer; ideal gb=groebner(jed); in char 32003 ca 8 sec timer -tt;