Changeset f533f6 in git


Ignore:
Timestamp:
Dec 22, 2014, 10:16:04 PM (9 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
Children:
048ea3186d7bb590bda21ff63cf0c632d11f6fe94083faab6546fc5c3396c90683e190ab3b4d1327
Parents:
dbe6a83090d114bef7df435a1e47e660f753e2dca5fb9a5a304c86021ae4d428884b70a93828c915
Message:
Merge pull request #681 from surface-smoothers/spielwiese.fix.lusolve

bugfix for  lusolve (track issue 358)
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/primdec.lib

    ra5fb9a rf533f6  
    18731873///////////////////////////////////////////////////////////////////////////////
    18741874
    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:
     1875static proc prepareQuotientring (int nnp,string order)
     1876"USAGE:   prepareQuotientring(nnp, order); nnp int, order string
     1877RETURN:  Kvar(nnp+1),...,var(nvars)[..rest ]
    18791878EXAMPLE: example prepareQuotientring; shows an example
    18801879"
     
    18831882  ASSUME(1, not isQuotientRing(basering) ) ;
    18841883  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);
    19051910  return(quotring);
    1906 
    19071911}
    19081912example
    19091913{ "EXAMPLE:"; echo = 2;
    19101914   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;
    19191917}
    19201918
     
    25812579     ideal j=groebner(imap(gnir,j));
    25822580  }
    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;
    25852583  ideal j=imap(gnir1,j);
    25862584  kill gnir1;
     
    25922590  }
    25932591  setring gnir;
    2594   ideal h=imap(quring,h);
    2595   kill quring;
     2592  ideal h=imap(quotring,h);
     2593  kill quotring;
    25962594
    25972595  list l=minSat(j,h);
     
    31003098
    31013099  poly @gs,@gh,@p;
    3102   string @va,quotring;
     3100  string @va;
     3101  def quotring;
    31033102  list quprimary,htprimary,collectprimary,lsau,lnew,allindep,restindep;
    31043103  ideal @h;
     
    32283227    //------------------------------------------------------------------------
    32293228
    3230     quotring=prepareQuotientring(nvars(basering)-indep[@m][3]);
     3229    quotring=prepareQuotientring(nvars(basering)-indep[@m][3],"lp");
    32313230
    32323231    //---------------------------------------------------------------------
     
    32353234
    32363235    ideal @jj=lead(@j);               //!! vorn vereinbaren
    3237     execute(quotring);
     3236    setring quotring;
    32383237
    32393238    ideal @jj=imap(gnir1,@jj);
     
    32493248    }
    32503249    @j=simplify(@j,2);
    3251     setring quring;
     3250    setring quotring;
    32523251    // @j considered in the quotientring
    32533252    ideal @j=imap(gnir1,@j);
     
    33363335    setring gnir;
    33373336
    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;
    33433343
    33443344    @n2=size(quprimary);
     
    35403540        //--->K(var(nnpr+1),..,var(nva))[..the rest..]
    35413541        //------------------------------------------------------------------
    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");
    35443544
    35453545        //------------------------------------------------------------------
     
    35473547        //------------------------------------------------------------------
    35483548
    3549         execute(quotring);
     3549        setring quotring;
    35503550
    35513551        // @j considered in the quotientring
     
    36253625        //------------------------------------------------------------------
    36263626        setring gnir;
    3627         collectprimary=imap(quring,uprimary);
    3628         lsau=imap(quring,saturn);
    3629         @h=imap(quring,@h);
    3630 
    3631         kill quring;
     3627        collectprimary=imap(quotring,uprimary);
     3628        lsau=imap(quotring,saturn);
     3629        @h=imap(quotring,@h);
     3630
     3631        kill quotring;
    36323632
    36333633        @n2=size(quprimary);
     
    62156215  ideal fac, @h, collectrad, lsau;
    62166216  poly @q;
    6217   string @va, quotring;
     6217  string @va; def quotring;
    62186218
    62196219  def @P = basering;
     
    63246324    // K(var(nnpr+1),..,var(nva))[..the rest..]
    63256325    //------------------------------------------------------------------------
    6326     quotring = prepareQuotientRingDp(nvars(basering) - indep[@m][3]);
     6326    quotring = prepareQuotientring(nvars(basering) - indep[@m][3],"dp");
    63276327    //------------------------------------------------------------------------
    63286328    // We pass to the quotientring   K(var(nnp+1),..,var(nva))[..the rest..]
    63296329    //------------------------------------------------------------------------
    63306330
    6331     execute(quotring);
     6331    setring quotring;
    63326332
    63336333    // @j considered in the quotientring
     
    63876387    setring @P;
    63886388
    6389     collectrad = imap(quring, zero_rad);
    6390     lsau = simplify(imap(quring, hpl), 2);
    6391     @h = imap(quring, @h);
    6392 
    6393     kill quring;
     6389    collectrad = imap(quotring, zero_rad);
     6390    lsau = simplify(imap(quotring, hpl), 2);
     6391    @h = imap(quotring, @h);
     6392
     6393    kill quotring;
    63946394
    63956395    // Here the intersection with the polynomialring
     
    66356635}
    66366636
    6637 
    6638 ///////////////////////////////////////////////////////////////////////////////
    6639 // based on prepareQuotientring
    6640 // The order returned is now (C, dp) instead of (C, lp)
    6641 
    6642 static proc prepareQuotientRingDp (int nnp)
    6643 "USAGE:   prepareQuotientRingDp(nnp); nnp int
    6644 RETURN:  string = to define Kvar(nnp+1),...,var(nvars)[..rest ]
    6645 NOTE:
    6646 EXAMPLE: example prepareQuotientRingDp; shows an example
    6647 "
    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 2
    6674 
    6675   return(quotring);
    6676 }
    6677 example
    6678 { "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 }
    66906637
    66916638///////////////////////////////////////////////////////////////////////////////
     
    73547301
    73557302  poly @gs,@gh,@p;
    7356   string @va,quotring;
     7303  string @va;
    73577304  list quprimary,htprimary,collectprimary,lsau,lnew,allindep,restindep;
    73587305  ideal @h;
     
    76197566           //------------------------------------------------------------------
    76207567
    7621            quotring=prepareQuotientring(nvars(basering)-restindep[@m][3]);
     7568           quotring=prepareQuotientring(nvars(basering)-restindep[@m][3],"lp");
    76227569
    76237570           //------------------------------------------------------------------
     
    76257572           //------------------------------------------------------------------
    76267573
    7627            execute(quotring);
     7574           setring quotring;
    76287575
    76297576           // @j considered in the quotientring
     
    77037650           //------------------------------------------------------------------
    77047651           setring gnir;
    7705            collectprimary=imap(quring,uprimary);
    7706            lsau=imap(quring,saturn);
    7707            @h=imap(quring,@h);
    7708 
    7709            kill quring;
     7652           collectprimary=imap(quotring,uprimary);
     7653           lsau=imap(quotring,saturn);
     7654           @h=imap(quotring,@h);
     7655
     7656           kill quotring;
    77107657
    77117658
     
    78747821
    78757822   string @va;
    7876    string quotring;
     7823   def quotring;
    78777824   intvec op;
    78787825   intvec @vv;
     
    79677914   //------------------------------------------------------------------------
    79687915
    7969    quotring=prepareQuotientring(nvars(basering)-indepInfo[3]);
     7916   quotring=prepareQuotientring(nvars(basering)-indepInfo[3],"lp");
    79707917
    79717918   //---------------------------------------------------------------------
     
    79747921
    79757922   ideal @jj=lead(@j);               //!! vorn vereinbaren
    7976    execute(quotring);
     7923   setring quotring;
    79777924
    79787925   ideal @jj=imap(gnir1,@jj);
     
    79887935   }
    79897936   @j=simplify(@j,2);
    7990    setring quring;
     7937   setring quotring;
    79917938   // @j considered in the quotientring
    79927939   ideal @j=imap(gnir1,@j);
     
    80788025   setring gnir;
    80798026
    8080    collectprimary=imap(quring,uprimary);
    8081    lsau=imap(quring,saturn);
    8082    @h=imap(quring,@h);
    8083 
    8084    kill quring;
     8027   collectprimary=imap(quotring,uprimary);
     8028   lsau=imap(quotring,saturn);
     8029   @h=imap(quotring,@h);
     8030
     8031   kill quotring;
    80858032
    80868033   @n2=size(quprimary);
  • Singular/LIB/primdecint.lib

    ra5fb9a rf533f6  
    11331133            //=== this is our way to obtain the coefficients in Z[u] of the
    11341134            //=== 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;
    11371137            ideal I=imap(Shelp,I);
    11381138            list C;
     
    14411441         //=== this is our way to obtain the coefficients in Z[u] of the
    14421442         //=== 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;
    14451445         module I=imap(Shelp,I);
    14461446         list C;
  • Tst/Short.lst

    rdbe6a8 rf533f6  
    3636Short/bug_34.tst
    3737Short/bug_35.tst
     38Short/bug_358.tst
    3839Short/bug_36.tst
    3940Short/bug_37.tst
  • kernel/linear_algebra/linearAlgebra.cc

    rdbe6a8 rf533f6  
    407407  /* determine whether uMat * xVec = yVec is solvable */
    408408  bool isSolvable = true;
    409   bool isZeroRow; int nonZeroRowIndex;
     409  bool isZeroRow;
     410  int nonZeroRowIndex = 0 ;   // handle case that the matrix is zero
    410411  for (int r = m; r >= 1; r--)
    411412  {
     
    430431       solution space will be. Thus, we start with the possibly too wide
    431432       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
    433436    for (int r = nonZeroRowIndex; r >= 1; r--)
    434437    {
    435438      for (nonZeroC = 1; nonZeroC <= n; nonZeroC++)
    436439        if (MATELEM(uMat, r, nonZeroC) != NULL) break;
     440
    437441      for (int w = lastNonZeroC - 1; w >= nonZeroC + 1; w--)
    438442      {
     
    467471      lastNonZeroC = nonZeroC;
    468472    }
     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
    469480    if (dim == 0)
    470481    {
     
    484495    idDelete((ideal*)&N);
    485496  }
    486 
    487497  idDelete((ideal*)&cVec);
    488498  idDelete((ideal*)&yVec);
Note: See TracChangeset for help on using the changeset viewer.