Changeset ca3332 in git for Singular/iparith.cc


Ignore:
Timestamp:
Feb 26, 2002, 1:25:17 PM (22 years ago)
Author:
Mathias Schulze <mschulze@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
110345e2447643a55f28c0f99db37a5a1eb15273
Parents:
c38d39f13a88f9cc44ed7a216d923bb8f632cb53
Message:
*mschulze: type conversion and normalize for DIVISION4


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

Legend:

Unmodified
Added
Removed
  • Singular/iparith.cc

    rc38d39f rca3332  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: iparith.cc,v 1.276 2002-02-26 09:01:11 mschulze Exp $ */
     4/* $Id: iparith.cc,v 1.277 2002-02-26 12:25:17 mschulze Exp $ */
    55
    66/*
     
    48224822  leftv v4=v3->next;
    48234823
    4824   if(v1->Typ()!=IDEAL_CMD&&v1->Typ()!=MODUL_CMD&&v1->Typ()!=MATRIX_CMD)
    4825   {
    4826     Warn("1st argument must be ideal, module, or matrix!");
     4824  int i1=iiTestConvert(v1->Typ(),MODUL_CMD);
     4825  int i2=iiTestConvert(v2->Typ(),MODUL_CMD);
     4826
     4827  if(i1==0||i2==0||v3->Typ()!=INT_CMD||v4->Typ()!=INTVEC_CMD)
     4828  {
     4829    Warn("<module>,<module>,<int>,<intvec> expected!");
    48274830    return TRUE;
    48284831  }
    4829   if(v1->Typ()!=v2->Typ()&&
    4830     (v1->Typ()!=MATRIX_CMD||v2->Typ()!=MODUL_CMD)&&
    4831     (v1->Typ()!=MODUL_CMD||v2->Typ()!=MATRIX_CMD))
    4832   {
    4833     Warn("2nd argument must be ideal, module, or matrix!");
    4834     return TRUE;
    4835   }
    4836   assumeStdFlag(v2);
    4837   if(v3->Typ()!=INT_CMD)
    4838   {
    4839     Warn("3rd argument must be int!");
    4840     return TRUE;
    4841   }
    4842   if(v4->Typ()!=INTVEC_CMD)
    4843   {
    4844     Warn("4th argument must be intvec!");
    4845     return TRUE;
    4846   }
    4847 
    4848   ideal P;
    4849   if(v1->Typ()==MATRIX_CMD)
    4850     P=idMatrix2Module(mpCopy((matrix)v1->Data()));
    4851   else
    4852     P=(ideal)v1->Data();
    4853   ideal Q;
    4854   if(v2->Typ()==MATRIX_CMD)
    4855     Q=idMatrix2Module(mpCopy((matrix)v2->Data()));
    4856   else
    4857     Q=(ideal)v2->Data();
     4832
     4833  sleftv w1,w2;
     4834  iiConvert(v1->Typ(),MODUL_CMD,i1,v1,&w1);
     4835  iiConvert(v2->Typ(),MODUL_CMD,i2,v2,&w2);
     4836  ideal P=(ideal)w1.Data();
     4837  ideal Q=(ideal)w2.Data();
     4838
    48584839  int n=(int)v3->Data();
    48594840  short *w=iv2array((intvec *)v4->Data());
     
    48664847  matrix T=mpNew(IDELEMS(Q),IDELEMS(P));
    48674848  ideal R=idInit(IDELEMS(P),P->rank);
    4868   matrix U=mpNew(P->rank,P->rank);
    4869   for(int i=MATROWS(U);i>=1;i--)
    4870     MATELEM(U,i,i)=pOne();
    48714849
    48724850  for(int i=IDELEMS(P)-1;i>=0;i--)
     
    48804858      {
    48814859        poly p0=pDivideM(pHead(p),pHead(Q->m[j]));
    4882         p=pSub(p,ppMult_mm(Q->m[j],p0));
     4860        p=pJetW(pSub(p,ppMult_mm(Q->m[j],p0)),N,w);
     4861        pNormalize(p);
    48834862        if(pDegW(p0,w)>n)
    48844863          pDelete(&p0);
    48854864        else
    48864865          MATELEM(T,j+1,i+1)=pAdd(MATELEM(T,j+1,i+1),p0);
    4887         p=ppJetW(p0=p,N,w);
    4888         pDelete(&p0);
    48894866        j=IDELEMS(Q)-1;
    48904867      }
     
    49084885  }
    49094886
    4910   if(v1->Typ()==MATRIX_CMD)
    4911     idDelete(&P);
    4912   if(v2->Typ()==MATRIX_CMD)
    4913     idDelete(&Q);
    49144887  omFree(w);
    49154888
    49164889  lists L=(lists)omAllocBin(slists_bin);
    4917   L->Init(3);
     4890  L->Init(2);
    49184891  L->m[0].rtyp=MATRIX_CMD;
    49194892  L->m[0].data=(void *)T;
    4920   L->m[1].rtyp=MATRIX_CMD;
    4921   L->m[1].data=(void *)U;
    4922   L->m[2].rtyp=v1->Typ();
    4923   if(v1->Typ()==MATRIX_CMD)
    4924     L->m[2].data=(void *)idModule2Matrix(R);
     4893  L->m[1].rtyp=v1->Typ();
     4894  if(v1->Typ()==POLY_CMD||v1->Typ()==VECTOR_CMD)
     4895  {
     4896    L->m[1].data=(void *)pCopy(R->m[0]);
     4897    idDelete(&R);
     4898  }
     4899  else if(v1->Typ()==IDEAL_CMD||v1->Typ()==MODUL_CMD)
     4900    L->m[1].data=(void *)R;
     4901  else if(v1->Typ()==MATRIX_CMD)
     4902    L->m[1].data=(void *)idModule2Matrix(R);
    49254903  else
    4926     L->m[2].data=(void *)R;
     4904  {
     4905    L->m[1].rtyp=MODUL_CMD;
     4906    L->m[1].data=(void *)R;
     4907  }
    49274908  res->data=L;
    49284909  res->rtyp=LIST_CMD;
Note: See TracChangeset for help on using the changeset viewer.