Changeset 30bb07 in git for Singular/LIB/presolve.lib


Ignore:
Timestamp:
May 29, 2009, 12:07:01 PM (15 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
667a9c0d30591ae4298e16548bf5886508bd3968
Parents:
a2b50cb2b820afde605ed45cb52930a5913927cc
Message:
*hannes: 1.33


git-svn-id: file:///usr/local/Singular/svn/trunk@11855 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/presolve.lib

    ra2b50c r30bb07  
    11///////////////////////////////////////////////////////////////////////////////
    2 version="$Id: presolve.lib,v 1.34 2009-05-29 09:26:48 Singular Exp $";
     2//changed GMG 20.5.09: degreepart, linearpart, elimpart
     3///////////////////////////////////////////////////////////////////////////////
     4version="$Id: presolve.lib,v 1.35 2009-05-29 10:07:01 Singular Exp $";
    35category="Symbolic-numerical solving";
    46info="
     
    9294          (default: v = 1,...,1)
    9395         _[2]: remaining generators of id
     96NOTE:    if id is of type int/number/poly it is converted to ideal, if id is
     97         of type intmat/matrix/vector to module and then the corresponding
     98         generators are computed
    9499EXAMPLE: example degreepart; shows an example
    95100"
     
    144149         _[1]: generators of id of total degree <= 1
    145150         _[2]: remaining generators of id
     151NOTE:    all variables have degree 1 (independent of ordering of basering)
    146152EXAMPLE: example linearpart; shows an example
    147153"
     
    179185"
    180186{
    181    int ii,n,k;
    182    string o, newo;
     187   int ii,n,k,ringchange;
     188   string o;
    183189   intvec getoption = option(get);
    184190   option(redSB);
     
    194200   if ( n < nvars(BAS) )
    195201   {
    196       rest = maxi[n+1..nvars(BAS)];
     202      rest = maxi[n+1..nvars(BAS)];     //variables which are not substituted
    197203   }
    198204   attrib(rest,"isSB",1);
     
    205211   //## gmg, geŠndert 9/2008: interred sehr lange z.B. bei Leonard1 in normal,
    206212   //daher interred ersetzt durch: std nur auf linearpart angewendet
    207    //Ordnung muss global sein, sonst egal (da Lin affin linear)
    208 
    209 //--------------- replace ordering by dp if it is not global -----------------
    210    if ( ord_test(BAS) <= 0 )
    211    {
     213   //Wechsel zu dp Ordnung (da Lin affin linear)
     214
     215//--------------- replace ordering different from dp by dp -------------------
     216   o = "dp("+string(n)+")";
     217   if( ! find(ordstr(BAS),o) or find(ordstr(BAS),"a") )
     218   {
     219      ringchange = 1;                         //remember change of ring
    212220      intvec V;
    213221      V[n]=0; V=V+1;                          //weights for dp ordering
     
    230238      lin = lin,id1;
    231239      lin = std(lin);
    232       id = simplify(NF(id,lin),2);   //instead of subst
     240      id = simplify(NF(id,lin),2);   //instead of subst, (### is faster)
    233241      id1 = linearpart(id)[1];
    234242   }
     
    275283//------------------ go back to original ring end return  ---------------------
    276284
    277    if ( ord_test(BAS) <= 0  )           //i.e there was a ring change
     285   if ( ringchange  )                   //i.e there was a ring change
    278286   {
    279287      setring BAS;
     
    347355
    348356   list L = elimlinearpart(i,n);
     357   ideal lin, eva, sub, neva, phi = L[1], L[2], L[3], L[4], L[5];
    349358   if ( e == 0 )
    350359   {
    351360       return(L);
    352361   }
    353    ideal lin, eva, sub, neva, phi = L[1], L[2], L[3], L[4], L[5];
     362
    354363//-------- direct substitution of variables if possible and if e!=0 -----------
    355364// first find terms lin1 in lin of pure degree 1 in each polynomial of lin
     
    382391-z ergibt ich auch i[2]-z*i[3] mit option(redThrough)
    383392statt interred kann man hier auch NF(i,i[3])+i[3] verwenden
    384 hier liefert elimpart(i) 2 Substitutionen (x,y) elimpart(interred(i))
     393hier lifert elimpart(i) 2 Substitutionen (x,y) elimpart(interred(i))
    385394aber 3 (x,y,z)
    386395Da interred oder NF aber die Laenge der polys vergroessern kann, nicht gemacht
     
    421430   //kin = polys of lin which contained a pure degree 1 part.
    422431   kin = simplify(kin,2);
    423    l = ncols(kin);                    //l != 0 since lin1 != 0
     432   l = size(kin);                      //l != 0 since lin1 != 0
    424433   poly p,kip,vip, cand;
    425434   int count=1;
     
    432441            {
    433442               p = kin[kk]/var(ii);
    434                if ( deg(p) == 0 )  //this means that kin[kk]= p*var(ii) + h,
    435                                    //with p=const and h not depending on var(ii)
     443               //if ( deg(p) == 0 )
     444               //old test, does not work if some var has deg 0
     445               //geaendert Mai 09 gmg
     446
     447               if( p!=0 & p == jet(p,0) )
     448                   //this means that kin[kk]= p*var(ii) + h,
     449                   //with p=const !=0 and h not depending on var(ii)
    436450               {
    437451                  //we look for the shortest candidate to substitute var(ii)
     
    448462                  }
    449463                }
    450             }     
     464            }
    451465            if ( cand != 0 )
    452466            {
    453467                  p = cand/var(ii);
    454                   kip = cand/p;      //normalized polynomial of kin w.r.t var(ii)
     468                  kip = cand/p;     //normalized polynomial of kin w.r.t var(ii)
    455469                  eva = eva+var(ii); //var(ii) added to list of elimin. vars
    456470                  neva[ii] = 0;
Note: See TracChangeset for help on using the changeset viewer.