Changeset 8fe22c in git


Ignore:
Timestamp:
Feb 25, 2002, 7:13:45 PM (21 years ago)
Author:
Mathias Schulze <mschulze@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'f875bbaccd0831e36aaed09ff6adeb3eb45aeb94')
Children:
962b1f0a4db237d3ca3ca0a559c3f5d44649ebaf
Parents:
2ca72f72ba5811479c336c3a36c9d120db4edfc7
Message:
*mschulze: added jjDIVISION4


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

Legend:

Unmodified
Added
Removed
  • Singular/iparith.cc

    r2ca72f r8fe22c  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: iparith.cc,v 1.274 2002-02-06 08:52:21 Singular Exp $ */
     4/* $Id: iparith.cc,v 1.275 2002-02-25 18:13:45 mschulze Exp $ */
    55
    66/*
     
    48144814  return FALSE;
    48154815}
     4816
     4817static BOOLEAN jjDIVISION4(leftv res, leftv v)
     4818{
     4819  int typ=v->Typ();
     4820  if(v->Typ()!=MODUL_CMD&&v->Typ()!=IDEAL_CMD)
     4821  {
     4822    Warn("1st argument must be an ideal or module!");
     4823    return TRUE;
     4824  }
     4825  ideal P=(ideal)v->Data();
     4826  v=v->next;
     4827  if(v->Typ()!=typ)
     4828  {
     4829    Warn("2nd argument must be an ideal or module!");
     4830    return TRUE;
     4831  }
     4832  assumeStdFlag(v);
     4833  ideal Q=(ideal)v->Data();
     4834  v=v->next;
     4835  if(v->Typ()!=INT_CMD)
     4836  {
     4837    Warn("3rd argument must be an int!");
     4838    return TRUE;
     4839  }
     4840  int n=(int)v->Data();
     4841  v=v->next;
     4842  if(v->Typ()!=INTVEC_CMD)
     4843  {
     4844    Warn("4th argument must be an intvec!");
     4845    return TRUE;
     4846  }
     4847  short *w=iv2array((intvec *)v->Data());
     4848
     4849  int N=0;
     4850  for(int i=IDELEMS(Q)-1;i>=0;i--)
     4851    N=max(N,pDegW(Q->m[i],w));
     4852  N+=n;
     4853
     4854  matrix T=mpNew(IDELEMS(Q),IDELEMS(P));
     4855  ideal R=idInit(IDELEMS(P),P->rank);
     4856  matrix U=mpNew(P->rank,P->rank);
     4857  for(int i=MATROWS(U);i>=1;i--)
     4858    MATELEM(U,i,i)=pOne();
     4859
     4860  for(int i=IDELEMS(P)-1;i>=0;i--)
     4861  {
     4862    poly p=ppJetW(P->m[i],N,w);
     4863
     4864    int j=IDELEMS(Q)-1;
     4865    while(p!=NULL)
     4866    {
     4867      if(pDivisibleBy(Q->m[j],p))
     4868      {
     4869        poly p0=pDivideM(pHead(p),pHead(Q->m[j]));
     4870        if(pDegW(p0,w)>n)
     4871          pDelete(&p0);
     4872        else
     4873          MATELEM(T,j+1,i+1)=pAdd(MATELEM(T,j+1,i+1),p0);
     4874        p0=ksOldSpolyRed(Q->m[j],p,0);
     4875        p=ppJetW(p0,N,w);
     4876        pDelete(&p0);
     4877        j=IDELEMS(Q)-1;
     4878      }
     4879      else
     4880      {
     4881        if(j==0)
     4882        {
     4883          poly p0=p;
     4884          pIter(p);
     4885          pNext(p0)=NULL;
     4886          if(pDegW(p0,w)>n)
     4887            pDelete(&p0);
     4888          else
     4889            R->m[i]=pAdd(R->m[i],p0);
     4890          j=IDELEMS(Q)-1;
     4891        }
     4892        else
     4893          j--;
     4894      }
     4895    }
     4896  }
     4897
     4898  omFree(w);
     4899
     4900  lists L=(lists)omAllocBin(slists_bin);
     4901  L->Init(3);
     4902  L->m[0].rtyp=MATRIX_CMD;
     4903  L->m[0].data=(void *)T;
     4904  L->m[1].rtyp=MATRIX_CMD;
     4905  L->m[1].data=(void *)U;
     4906  L->m[2].rtyp=typ;
     4907  L->m[2].data=(void *)R;
     4908  res->data=L;
     4909  res->rtyp=LIST_CMD;
     4910
     4911  return FALSE;
     4912}
     4913
    48164914static BOOLEAN jjIDEAL_PL(leftv res, leftv v)
    48174915{
Note: See TracChangeset for help on using the changeset viewer.