Changeset 110345 in git


Ignore:
Timestamp:
Feb 28, 2002, 6:56:34 PM (22 years ago)
Author:
Mathias Schulze <mschulze@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b4f17ed1d25f93d46dbe29e4b499baecc2fd51bb')
Children:
52dd16ad91baa99ad289271833061020c2611bab
Parents:
ca333242d1ba897a923f436babbc49409e97d8ff
Message:
*mschulze: DIVISION4 moved to idLiftW


git-svn-id: file:///usr/local/Singular/svn/trunk@5936 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
Singular
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Singular/ideals.cc

    rca3332 r110345  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: ideals.cc,v 1.126 2002-01-19 14:48:16 obachman Exp $ */
     4/* $Id: ideals.cc,v 1.127 2002-02-28 17:56:33 mschulze Exp $ */
    55/*
    66* ABSTRACT - all basic methods to manipulate ideals
     
    18861886
    18871887/*2
     1888*computes division of P by Q with remainder up to weighted degree n
     1889*P, Q, and w are not changed
     1890*/
     1891lists idLiftW(ideal P, ideal Q, int n, short *w)
     1892{
     1893  int N=0;
     1894  int i;
     1895  for(i=IDELEMS(Q)-1;i>=0;i--)
     1896    N=max(N,pDegW(Q->m[i],w));
     1897  N+=n;
     1898
     1899  matrix T=mpNew(IDELEMS(Q),IDELEMS(P));
     1900  ideal R=idInit(IDELEMS(P),P->rank);
     1901
     1902  for(i=IDELEMS(P)-1;i>=0;i--)
     1903  {
     1904    poly p=ppJetW(P->m[i],N,w);
     1905
     1906    int j=IDELEMS(Q)-1;
     1907    while(p!=NULL)
     1908    {
     1909      if(pDivisibleBy(Q->m[j],p))
     1910      {
     1911        poly p0=pDivideM(pHead(p),pHead(Q->m[j]));
     1912        p=pJetW(pSub(p,ppMult_mm(Q->m[j],p0)),N,w);
     1913        pNormalize(p);
     1914        if(pDegW(p0,w)>n)
     1915          pDelete(&p0);
     1916        else
     1917          MATELEM(T,j+1,i+1)=pAdd(MATELEM(T,j+1,i+1),p0);
     1918        j=IDELEMS(Q)-1;
     1919      }
     1920      else
     1921      {
     1922        if(j==0)
     1923        {
     1924          poly p0=p;
     1925          pIter(p);
     1926          pNext(p0)=NULL;
     1927          if(pDegW(p0,w)>n)
     1928            pDelete(&p0);
     1929          else
     1930            R->m[i]=pAdd(R->m[i],p0);
     1931          j=IDELEMS(Q)-1;
     1932        }
     1933        else
     1934          j--;
     1935      }
     1936    }
     1937  }
     1938
     1939  lists L=(lists)omAllocBin(slists_bin);
     1940  L->Init(2);
     1941  L->m[0].rtyp=MATRIX_CMD;
     1942  L->m[0].data=(void *)T;
     1943  L->m[1].rtyp=MODUL_CMD;
     1944  L->m[1].data=(void *)R;
     1945
     1946  return L;
     1947}
     1948
     1949/*2
    18881950*computes the quotient of h1,h2 : interanl routine for idQuot
    18891951*BEWARE: the returned ideals may contain incorrected orderd polys !
  • Singular/ideals.h

    rca3332 r110345  
    44*  Computer Algebra System SINGULAR     *
    55****************************************/
    6 /* $Id: ideals.h,v 1.36 2002-01-19 14:48:16 obachman Exp $ */
     6/* $Id: ideals.h,v 1.37 2002-02-28 17:56:33 mschulze Exp $ */
    77/*
    88* ABSTRACT - all basic methods to manipulate ideals
     
    9797             matrix *unit=NULL);
    9898
     99lists   idLiftW (ideal P, ideal Q, int n, short *w);
     100
    99101intvec * idMWLift(ideal mod,intvec * weights);
    100102
  • Singular/iparith.cc

    rca3332 r110345  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: iparith.cc,v 1.277 2002-02-26 12:25:17 mschulze Exp $ */
     4/* $Id: iparith.cc,v 1.278 2002-02-28 17:56:34 mschulze Exp $ */
    55
    66/*
     
    48274827  if(i1==0||i2==0||v3->Typ()!=INT_CMD||v4->Typ()!=INTVEC_CMD)
    48284828  {
    4829     Warn("<module>,<module>,<int>,<intvec> expected!");
     4829    WarnS("<module>,<module>,<int>,<intvec> expected!");
    48304830    return TRUE;
    48314831  }
     
    48404840  short *w=iv2array((intvec *)v4->Data());
    48414841
    4842   int N=0;
    4843   for(int i=IDELEMS(Q)-1;i>=0;i--)
    4844     N=max(N,pDegW(Q->m[i],w));
    4845   N+=n;
    4846 
    4847   matrix T=mpNew(IDELEMS(Q),IDELEMS(P));
    4848   ideal R=idInit(IDELEMS(P),P->rank);
    4849 
    4850   for(int i=IDELEMS(P)-1;i>=0;i--)
    4851   {
    4852     poly p=ppJetW(P->m[i],N,w);
    4853 
    4854     int j=IDELEMS(Q)-1;
    4855     while(p!=NULL)
    4856     {
    4857       if(pDivisibleBy(Q->m[j],p))
    4858       {
    4859         poly p0=pDivideM(pHead(p),pHead(Q->m[j]));
    4860         p=pJetW(pSub(p,ppMult_mm(Q->m[j],p0)),N,w);
    4861         pNormalize(p);
    4862         if(pDegW(p0,w)>n)
    4863           pDelete(&p0);
    4864         else
    4865           MATELEM(T,j+1,i+1)=pAdd(MATELEM(T,j+1,i+1),p0);
    4866         j=IDELEMS(Q)-1;
    4867       }
    4868       else
    4869       {
    4870         if(j==0)
    4871         {
    4872           poly p0=p;
    4873           pIter(p);
    4874           pNext(p0)=NULL;
    4875           if(pDegW(p0,w)>n)
    4876             pDelete(&p0);
    4877           else
    4878             R->m[i]=pAdd(R->m[i],p0);
    4879           j=IDELEMS(Q)-1;
    4880         }
    4881         else
    4882           j--;
    4883       }
    4884     }
    4885   }
     4842  short *w0=w+1;
     4843  int i=pVariables;
     4844  while(i>0&&*w0>0)
     4845  {
     4846    w0++;
     4847    i--;
     4848  }
     4849  if(i>0)
     4850    WarnS("not all weights are positive!");
     4851
     4852  lists L=idLiftW(P,Q,n,w);
    48864853
    48874854  omFree(w);
    48884855
    4889   lists L=(lists)omAllocBin(slists_bin);
    4890   L->Init(2);
    4891   L->m[0].rtyp=MATRIX_CMD;
    4892   L->m[0].data=(void *)T;
    48934856  L->m[1].rtyp=v1->Typ();
     4857  ideal R=(ideal)L->m[1].data;
    48944858  if(v1->Typ()==POLY_CMD||v1->Typ()==VECTOR_CMD)
    48954859  {
    4896     L->m[1].data=(void *)pCopy(R->m[0]);
     4860    L->m[1].data=(void *)R->m[0];
     4861    R->m[0]=NULL;
    48974862    idDelete(&R);
    48984863  }
    4899   else if(v1->Typ()==IDEAL_CMD||v1->Typ()==MODUL_CMD)
    4900     L->m[1].data=(void *)R;
    49014864  else if(v1->Typ()==MATRIX_CMD)
    49024865    L->m[1].data=(void *)idModule2Matrix(R);
    4903   else
    4904   {
     4866  else if(v1->Typ()!=IDEAL_CMD&&v1->Typ()!=MODUL_CMD)
    49054867    L->m[1].rtyp=MODUL_CMD;
    4906     L->m[1].data=(void *)R;
    4907   }
    49084868  res->data=L;
    49094869  res->rtyp=LIST_CMD;
Note: See TracChangeset for help on using the changeset viewer.