Changeset 87dcc3 in git for Singular/LIB/finvar.lib


Ignore:
Timestamp:
Dec 20, 2007, 2:56:21 PM (16 years ago)
Author:
Simon King <king@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
2ec0d5d3adb763304233a52a8b7b8b7a0ea1258f
Parents:
0fe8302bf29ee6908ae99acfc5ce2a788b79af7f
Message:
In secondary_not_cohen_macaulay: Andere Ringordnung (gewichtetes dp). Das ist nicht immer das Schnellste, ist aber wohl ein sinnvoller Kompromiss.


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

Legend:

Unmodified
Added
Removed
  • Singular/LIB/finvar.lib

    r0fe830 r87dcc3  
    11///////////////////////////////////////////////////////////////////////////////
    2 version="$Id: finvar.lib,v 1.74 2007-12-19 18:04:15 king Exp $"
     2version="$Id: finvar.lib,v 1.75 2007-12-20 13:56:21 king Exp $"
    33category="Invariant theory";
    44info="
     
    7878LIB "general.lib";
    7979LIB "algebra.lib";
     80LIB "ring.lib";
    8081
    8182///////////////////////////////////////////////////////////////////////////////
     
    69936994  { "";
    69946995  }
    6995   // ring alskdfalkdsj=0,x,dp;
    6996   // matrix M[1][2]=1,(1-x)^n;           
    6997   // export alskdfalkdsj;
    6998   // export M;                            // we look at our primary invariants as
    6999   // setring br;                          // such of the subgroup that only
    7000   // matrix REY=matrix(maxideal(1));      // contains the identity, this means that
    7001                                        // ch does not divide the order anymore,
    7002                                        // this means that we can make use of the
    7003                                        // Molien series again - M[1,1]/M[1,2] is
    7004                                        // the Molien series of that group, we
    7005                                        // now calculate the secondary invariants
    7006                                        // of this subgroup in the usual fashion
    7007                                        // where the primary invariants are the
    7008                                        // ones from the bigger group
     6996 
     6997  // we look at our primary invariants as such of the subgroup that only
     6998  // contains the identity, this means that ch does not divide the order anymore,
     6999  // this means that we can make use of the Molien series again - M[1,1]/M[1,2] is
     7000  // the Molien series of that group, we now calculate the secondary invariants
     7001  // of this subgroup in the usual fashion where the primary invariants are the
     7002  // ones from the bigger group.
    70097003  if (v)
    70107004  { "  First, get secondary invariants for the trivial action, with respect to";
     
    70187012    return();
    70197013  }
    7020   matrix trivialS = matrix(kbase(GP));// , trivialIS=secondary_charp(P,REY,"alskdfalkdsj",v);
    7021   // kill trivialIS;
    7022   // kill alskdfalkdsj;
    7023   // now we have those secondary invariants
    7024   int k=ncols(trivialS);               // k is the number of the secondary
    7025                                        // invariants, we just calculated
     7014  matrix trivialS = matrix(kbase(GP)); // Now we have those secondary invariants!
     7015                                       // Simply they are standard monomials.
     7016  int k=ncols(trivialS);               // k is the number of trivial s.i.
    70267017  if (v)
    70277018  { "  We calculate secondary invariants from the ones found for the trivial";
     
    70417032    M(1)[i,1..k]=B[1..k];              // we will look for the syzygies of M(1)
    70427033  }
    7043 //  intvec save_opts=option(get);
    7044 //  option(returnSB,redSB);
    7045 //  module M(2)=syz(M(1));               // nres(M(1),2)[2];
    7046 //  option(set,save_opts);
    70477034  if (v)
    70487035  { "  Compute syzygies of the \"trivial\" secondaries"; }
     
    70607047  intvec dv = degvec(ideal(P)),1;
    70617048  ring newR = char(br), (y(1..n),h),(a(dv),dp);
    7062   def R = br + newR;
     7049  def tmpR = br + newR;
     7050  setring tmpR;
     7051  intvec newdv=degvec(maxideal(1));
     7052  def R = changeord("a("+string(newdv)+"),dp");
    70637053  setring R;
     7054  kill tmpR;
    70647055  matrix P=fetch(br,P);                       // primary invariants in the new ring
    70657056  ideal ElimP;
    70667057  for (i=1;i<=n;i++)
    70677058  { ElimP[i]=y(i)-P[1,i]; }
    7068   def RHilb = newR+br; // the new variables only appear linearly, so that block order wouldn't hurt
    7069   setring RHilb;
    7070   ideal ElimP=imap(R,ElimP);
    7071   intvec EPvec = hilb(groebner(ElimP),1,degvec(maxideal(1)));
    7072   setring R;
    7073   ideal GElimP = std(ElimP,EPvec,degvec(maxideal(1)));
    7074   attrib(GElimP,"isSB",1);
    7075   int newN = ncols(GElimP); 
     7059  // def RHilb = newR+br; // the new variables only appear linearly, so that block order wouldn't hurt
     7060  // setring RHilb;
     7061  // ideal ElimP=imap(R,ElimP);
     7062  // intvec EPvec = hilb(groebner(ElimP),1,degvec(maxideal(1)));
     7063  // setring R;
     7064  // ideal GElimP = std(ElimP,EPvec,degvec(maxideal(1)));
     7065  // attrib(GElimP,"isSB",1);
     7066  // int newN = ncols(GElimP); 
     7067  int newN = ncols(ElimP); 
    70767068  matrix M[k][m+k*newN];
    70777069  M[1..k,1..m]=matrix(imap(br,M(2)));        // will contain a module -
    7078   for (i=1;i<=newN;i++)
    7079   { for (j=1;j<=k;j++)
    7080     { M[j,m+(i-1)*k+j]=GElimP[i]; // y(i)-P[1,i];
    7081     }
    7082   }
    7083 
    7084   M=elim(module(M),1,n);               // eliminating x(1..n), std-calculation
    7085                                          // is done internally -
     7070  for (i=1;i<=newN;i++){
     7071    for (j=1;j<=k;j++) {
     7072    // M[j,m+(i-1)*k+j]=GElimP[i]; // y(i)-P[1,i];
     7073      M[j,m+(i-1)*k+j]=ElimP[i];
     7074    }
     7075  }
     7076
     7077  M=elim(module(M),1,n);           // eliminating x(1..n), std-calculation is done internally -
    70867078  M=homog(module(M),h);            // homogenize for 'minbase'
    70877079  M=minbase(module(M));
     
    70917083  }
    70927084  substitute = substitute,ideal(P),1;
    7093   map f=R,substitute;                      // replacing y(1..n) by primary
     7085  map f=R,substitute;                  // replacing y(1..n) by primary
    70947086                                       // invariants and h by 1 -
    70957087  M=f(M);                              // we can't directly map from R to br
    70967088  setring br;                          // if there is a minpoly.
    7097   module M(3)=imap(R,M);                     // M(2) is the new module
     7089  module M(3)=imap(R,M);               // M(2) is the new module
    70987090  m=ncols(M(3));
    70997091  matrix S[1][m];
Note: See TracChangeset for help on using the changeset viewer.