Changeset f533f6 in git
- Timestamp:
- Dec 22, 2014, 10:16:04 PM (9 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 048ea3186d7bb590bda21ff63cf0c632d11f6fe94083faab6546fc5c3396c90683e190ab3b4d1327
- Parents:
- dbe6a83090d114bef7df435a1e47e660f753e2dca5fb9a5a304c86021ae4d428884b70a93828c915
- Files:
-
- 3 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/primdec.lib
ra5fb9a rf533f6 1873 1873 /////////////////////////////////////////////////////////////////////////////// 1874 1874 1875 static proc prepareQuotientring (int nnp) 1876 "USAGE: prepareQuotientring(nnp); nnp int 1877 RETURN: string = to define Kvar(nnp+1),...,var(nvars)[..rest ] 1878 NOTE: 1875 static proc prepareQuotientring (int nnp,string order) 1876 "USAGE: prepareQuotientring(nnp, order); nnp int, order string 1877 RETURN: Kvar(nnp+1),...,var(nvars)[..rest ] 1879 1878 EXAMPLE: example prepareQuotientring; shows an example 1880 1879 " … … 1883 1882 ASSUME(1, not isQuotientRing(basering) ) ; 1884 1883 ASSUME(1, hasGlobalOrdering(basering) ) ; 1885 ideal @ih,@jh; 1886 int npar=npars(basering); 1887 int @n; 1888 1889 string quotring= "ring quring = ("+charstr(basering); 1890 for(@n=nnp+1;@n<=nvars(basering);@n++) 1891 { 1892 quotring=quotring+",var("+string(@n)+")"; 1893 @ih=@ih+var(@n); 1894 } 1895 1896 quotring=quotring+"),(var(1)"; 1897 @jh=@jh+var(1); 1898 for(@n=2;@n<=nnp;@n++) 1899 { 1900 quotring=quotring+",var("+string(@n)+")"; 1901 @jh=@jh+var(@n); 1902 } 1903 quotring=quotring+"),(C,lp);"; 1904 1884 list rl=ringlist(basering); 1885 if (typeof(rl[1])=="int") 1886 { 1887 int p=rl[1]; 1888 list rl2=rl[2]; 1889 rl[1]=list(p, 1890 list(rl2[nnp+1..nvars(basering)]), 1891 list(list("lp",1:(nvars(basering)-nnp))), 1892 ideal(0)); 1893 rl[2]=list(rl2[1..nnp]); 1894 rl[3]=list(list(order,1:nnp),list("C",0)); 1895 } 1896 else 1897 { 1898 if (typeof(rl[1])=="list") 1899 list rl1=rl[1]; 1900 list rl2=rl[2]; 1901 rl1[1]=list(rl1[1][1], 1902 rl[1][2]+list(rl2[nnp+1..nvars(basering)]), 1903 list(list("lp",1:(size(rl[1][2])+nvars(basering)-nnp))), 1904 ideal(0)); 1905 rl[1]=rl1; 1906 rl[2]=list(rl2[1..nnp]); 1907 rl[3]=list(list(order,1:nnp),list("C",0)); 1908 } 1909 def quotring=ring(rl); 1905 1910 return(quotring); 1906 1907 1911 } 1908 1912 example 1909 1913 { "EXAMPLE:"; echo = 2; 1910 1914 ring s1=(0,x),(a,b,c,d,e,f,g),lp; 1911 def @Q=basering; 1912 list l= prepareQuotientring(3); 1913 l; 1914 execute(l[1]); 1915 execute(l[2]); 1916 basering; 1917 phi; 1918 setring @Q; 1915 def Q= prepareQuotientring(3,"lp"); 1916 Q; 1919 1917 } 1920 1918 … … 2581 2579 ideal j=groebner(imap(gnir,j)); 2582 2580 } 2583 string quotring=prepareQuotientring(nvars(basering)-indep[1][3]);2584 execute(quotring);2581 def quotring=prepareQuotientring(nvars(basering)-indep[1][3],"lp"); 2582 setring quotring; 2585 2583 ideal j=imap(gnir1,j); 2586 2584 kill gnir1; … … 2592 2590 } 2593 2591 setring gnir; 2594 ideal h=imap(qu ring,h);2595 kill qu ring;2592 ideal h=imap(quotring,h); 2593 kill quotring; 2596 2594 2597 2595 list l=minSat(j,h); … … 3100 3098 3101 3099 poly @gs,@gh,@p; 3102 string @va,quotring; 3100 string @va; 3101 def quotring; 3103 3102 list quprimary,htprimary,collectprimary,lsau,lnew,allindep,restindep; 3104 3103 ideal @h; … … 3228 3227 //------------------------------------------------------------------------ 3229 3228 3230 quotring=prepareQuotientring(nvars(basering)-indep[@m][3] );3229 quotring=prepareQuotientring(nvars(basering)-indep[@m][3],"lp"); 3231 3230 3232 3231 //--------------------------------------------------------------------- … … 3235 3234 3236 3235 ideal @jj=lead(@j); //!! vorn vereinbaren 3237 execute(quotring);3236 setring quotring; 3238 3237 3239 3238 ideal @jj=imap(gnir1,@jj); … … 3249 3248 } 3250 3249 @j=simplify(@j,2); 3251 setring qu ring;3250 setring quotring; 3252 3251 // @j considered in the quotientring 3253 3252 ideal @j=imap(gnir1,@j); … … 3336 3335 setring gnir; 3337 3336 3338 collectprimary=imap(quring,uprimary); 3339 lsau=imap(quring,saturn); 3340 @h=imap(quring,@h); 3341 3342 kill quring; 3337 collectprimary=imap(quotring,uprimary); 3338 lsau=imap(quotring,saturn); 3339 @h=imap(quotring,@h); 3340 3341 kill quotring; 3342 def quotring; 3343 3343 3344 3344 @n2=size(quprimary); … … 3540 3540 //--->K(var(nnpr+1),..,var(nva))[..the rest..] 3541 3541 //------------------------------------------------------------------ 3542 3543 quotring=prepareQuotientring(nvars(basering)-restindep[@m][3]);3542 if (defined(quotring)==voice) {kill quotring;} 3543 def quotring=prepareQuotientring(nvars(basering)-restindep[@m][3],"lp"); 3544 3544 3545 3545 //------------------------------------------------------------------ … … 3547 3547 //------------------------------------------------------------------ 3548 3548 3549 execute(quotring);3549 setring quotring; 3550 3550 3551 3551 // @j considered in the quotientring … … 3625 3625 //------------------------------------------------------------------ 3626 3626 setring gnir; 3627 collectprimary=imap(qu ring,uprimary);3628 lsau=imap(qu ring,saturn);3629 @h=imap(qu ring,@h);3630 3631 kill qu ring;3627 collectprimary=imap(quotring,uprimary); 3628 lsau=imap(quotring,saturn); 3629 @h=imap(quotring,@h); 3630 3631 kill quotring; 3632 3632 3633 3633 @n2=size(quprimary); … … 6215 6215 ideal fac, @h, collectrad, lsau; 6216 6216 poly @q; 6217 string @va ,quotring;6217 string @va; def quotring; 6218 6218 6219 6219 def @P = basering; … … 6324 6324 // K(var(nnpr+1),..,var(nva))[..the rest..] 6325 6325 //------------------------------------------------------------------------ 6326 quotring = prepareQuotient RingDp(nvars(basering) - indep[@m][3]);6326 quotring = prepareQuotientring(nvars(basering) - indep[@m][3],"dp"); 6327 6327 //------------------------------------------------------------------------ 6328 6328 // We pass to the quotientring K(var(nnp+1),..,var(nva))[..the rest..] 6329 6329 //------------------------------------------------------------------------ 6330 6330 6331 execute(quotring);6331 setring quotring; 6332 6332 6333 6333 // @j considered in the quotientring … … 6387 6387 setring @P; 6388 6388 6389 collectrad = imap(qu ring, zero_rad);6390 lsau = simplify(imap(qu ring, hpl), 2);6391 @h = imap(qu ring, @h);6392 6393 kill qu ring;6389 collectrad = imap(quotring, zero_rad); 6390 lsau = simplify(imap(quotring, hpl), 2); 6391 @h = imap(quotring, @h); 6392 6393 kill quotring; 6394 6394 6395 6395 // Here the intersection with the polynomialring … … 6635 6635 } 6636 6636 6637 6638 ///////////////////////////////////////////////////////////////////////////////6639 // based on prepareQuotientring6640 // The order returned is now (C, dp) instead of (C, lp)6641 6642 static proc prepareQuotientRingDp (int nnp)6643 "USAGE: prepareQuotientRingDp(nnp); nnp int6644 RETURN: string = to define Kvar(nnp+1),...,var(nvars)[..rest ]6645 NOTE:6646 EXAMPLE: example prepareQuotientRingDp; shows an example6647 "6648 {6649 ASSUME(1, hasFieldCoefficient(basering) );6650 ASSUME(1, not isQuotientRing(basering) ) ;6651 ASSUME(1, hasGlobalOrdering(basering) ) ;6652 6653 ideal @ih,@jh;6654 int npar=npars(basering);6655 int @n;6656 6657 string quotring= "ring quring = ("+charstr(basering);6658 for(@n = nnp + 1; @n <= nvars(basering); @n++)6659 {6660 quotring = quotring + ", var(" + string(@n) + ")";6661 @ih = @ih + var(@n);6662 }6663 6664 quotring = quotring+"),(var(1)";6665 @jh = @jh + var(1);6666 for(@n = 2; @n <= nnp; @n++)6667 {6668 quotring = quotring + ", var(" + string(@n) + ")";6669 @jh = @jh + var(@n);6670 }6671 // SL 2006-04-21 1 The order returned is now (C, dp) instead of (C, lp)6672 quotring = quotring + "), (C, dp);";6673 // SL 2006-04-21 26674 6675 return(quotring);6676 }6677 example6678 { "EXAMPLE:"; echo = 2;6679 ring s1=(0,x),(a,b,c,d,e,f,g),lp;6680 def @Q=basering;6681 list l= prepareQuotientRingDp(3);6682 l;6683 execute(l[1]);6684 execute(l[2]);6685 basering;6686 phi;6687 setring @Q;6688 6689 }6690 6637 6691 6638 /////////////////////////////////////////////////////////////////////////////// … … 7354 7301 7355 7302 poly @gs,@gh,@p; 7356 string @va ,quotring;7303 string @va; 7357 7304 list quprimary,htprimary,collectprimary,lsau,lnew,allindep,restindep; 7358 7305 ideal @h; … … 7619 7566 //------------------------------------------------------------------ 7620 7567 7621 quotring=prepareQuotientring(nvars(basering)-restindep[@m][3] );7568 quotring=prepareQuotientring(nvars(basering)-restindep[@m][3],"lp"); 7622 7569 7623 7570 //------------------------------------------------------------------ … … 7625 7572 //------------------------------------------------------------------ 7626 7573 7627 execute(quotring);7574 setring quotring; 7628 7575 7629 7576 // @j considered in the quotientring … … 7703 7650 //------------------------------------------------------------------ 7704 7651 setring gnir; 7705 collectprimary=imap(qu ring,uprimary);7706 lsau=imap(qu ring,saturn);7707 @h=imap(qu ring,@h);7708 7709 kill qu ring;7652 collectprimary=imap(quotring,uprimary); 7653 lsau=imap(quotring,saturn); 7654 @h=imap(quotring,@h); 7655 7656 kill quotring; 7710 7657 7711 7658 … … 7874 7821 7875 7822 string @va; 7876 stringquotring;7823 def quotring; 7877 7824 intvec op; 7878 7825 intvec @vv; … … 7967 7914 //------------------------------------------------------------------------ 7968 7915 7969 quotring=prepareQuotientring(nvars(basering)-indepInfo[3] );7916 quotring=prepareQuotientring(nvars(basering)-indepInfo[3],"lp"); 7970 7917 7971 7918 //--------------------------------------------------------------------- … … 7974 7921 7975 7922 ideal @jj=lead(@j); //!! vorn vereinbaren 7976 execute(quotring);7923 setring quotring; 7977 7924 7978 7925 ideal @jj=imap(gnir1,@jj); … … 7988 7935 } 7989 7936 @j=simplify(@j,2); 7990 setring qu ring;7937 setring quotring; 7991 7938 // @j considered in the quotientring 7992 7939 ideal @j=imap(gnir1,@j); … … 8078 8025 setring gnir; 8079 8026 8080 collectprimary=imap(qu ring,uprimary);8081 lsau=imap(qu ring,saturn);8082 @h=imap(qu ring,@h);8083 8084 kill qu ring;8027 collectprimary=imap(quotring,uprimary); 8028 lsau=imap(quotring,saturn); 8029 @h=imap(quotring,@h); 8030 8031 kill quotring; 8085 8032 8086 8033 @n2=size(quprimary); -
Singular/LIB/primdecint.lib
ra5fb9a rf533f6 1133 1133 //=== this is our way to obtain the coefficients in Z[u] of the 1134 1134 //=== leading terms of the Groebner basis above 1135 string quotring=Primdec::prepareQuotientring(nvars(basering)-L[1][3]);1136 execute(quotring);1135 def quring=Primdec::prepareQuotientring(nvars(basering)-L[1][3],"lp"); 1136 setring quring; 1137 1137 ideal I=imap(Shelp,I); 1138 1138 list C; … … 1441 1441 //=== this is our way to obtain the coefficients in Z[u] of the 1442 1442 //=== leading terms of the Groebner basis above 1443 string quotring=Primdec::prepareQuotientring(nvars(basering)-L[1][3]);1444 execute(quotring);1443 def quring=Primdec::prepareQuotientring(nvars(basering)-L[1][3],"lp"); 1444 setring quring; 1445 1445 module I=imap(Shelp,I); 1446 1446 list C; -
Tst/Short.lst
rdbe6a8 rf533f6 36 36 Short/bug_34.tst 37 37 Short/bug_35.tst 38 Short/bug_358.tst 38 39 Short/bug_36.tst 39 40 Short/bug_37.tst -
kernel/linear_algebra/linearAlgebra.cc
rdbe6a8 rf533f6 407 407 /* determine whether uMat * xVec = yVec is solvable */ 408 408 bool isSolvable = true; 409 bool isZeroRow; int nonZeroRowIndex; 409 bool isZeroRow; 410 int nonZeroRowIndex = 0 ; // handle case that the matrix is zero 410 411 for (int r = m; r >= 1; r--) 411 412 { … … 430 431 solution space will be. Thus, we start with the possibly too wide 431 432 matrix N and later copy the relevant columns of N into H. */ 432 int nonZeroC; int lastNonZeroC = n + 1; 433 int nonZeroC = 0 ; 434 int lastNonZeroC = n + 1; 435 433 436 for (int r = nonZeroRowIndex; r >= 1; r--) 434 437 { 435 438 for (nonZeroC = 1; nonZeroC <= n; nonZeroC++) 436 439 if (MATELEM(uMat, r, nonZeroC) != NULL) break; 440 437 441 for (int w = lastNonZeroC - 1; w >= nonZeroC + 1; w--) 438 442 { … … 467 471 lastNonZeroC = nonZeroC; 468 472 } 473 for (int w = lastNonZeroC - 1; w >= 1; w--) 474 { 475 // remaining variables are free 476 dim++; 477 MATELEM(N, w, dim) = pOne(); 478 } 479 469 480 if (dim == 0) 470 481 { … … 484 495 idDelete((ideal*)&N); 485 496 } 486 487 497 idDelete((ideal*)&cVec); 488 498 idDelete((ideal*)&yVec);
Note: See TracChangeset
for help on using the changeset viewer.