Changeset 3b8515 in git for Singular/iparith.cc


Ignore:
Timestamp:
Feb 26, 2002, 10:01:11 AM (22 years ago)
Author:
Mathias Schulze <mschulze@…>
Branches:
(u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
Children:
3c1bbe74e9f803249a7ac22c4a3f339963ec0a1b
Parents:
97403d7b5d41e537394fcbd7c261d7b70302488c
Message:
*mschulze: division for matrix


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

Legend:

Unmodified
Added
Removed
  • Singular/iparith.cc

    r97403d r3b8515  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: iparith.cc,v 1.275 2002-02-25 18:13:45 mschulze Exp $ */
     4/* $Id: iparith.cc,v 1.276 2002-02-26 09:01:11 mschulze Exp $ */
    55
    66/*
     
    153153  { "dim",         0, DIM_CMD ,           CMD_1},
    154154  { "div",         0, INTDIV_CMD ,        MULDIV_OP},
    155   { "division",    0, DIVISION_CMD ,      CMD_2},
     155  { "division",    0, DIVISION_CMD ,      CMD_M},
    156156#ifdef DRING
    157157  { "dring",       0, DRING_CMD ,         DRING_CMD},
     
    48174817static BOOLEAN jjDIVISION4(leftv res, leftv v)
    48184818{
    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!");
     4819  leftv v1=v;
     4820  leftv v2=v1->next;
     4821  leftv v3=v2->next;
     4822  leftv v4=v3->next;
     4823
     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!");
    48234827    return TRUE;
    48244828  }
    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!");
     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!");
    48304834    return TRUE;
    48314835  }
    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!");
     4836  assumeStdFlag(v2);
     4837  if(v3->Typ()!=INT_CMD)
     4838  {
     4839    Warn("3rd argument must be int!");
    48384840    return TRUE;
    48394841  }
    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!");
     4842  if(v4->Typ()!=INTVEC_CMD)
     4843  {
     4844    Warn("4th argument must be intvec!");
    48454845    return TRUE;
    48464846  }
    4847   short *w=iv2array((intvec *)v->Data());
     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();
     4858  int n=(int)v3->Data();
     4859  short *w=iv2array((intvec *)v4->Data());
    48484860
    48494861  int N=0;
     
    48684880      {
    48694881        poly p0=pDivideM(pHead(p),pHead(Q->m[j]));
     4882        p=pSub(p,ppMult_mm(Q->m[j],p0));
    48704883        if(pDegW(p0,w)>n)
    48714884          pDelete(&p0);
    48724885        else
    48734886          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);
     4887        p=ppJetW(p0=p,N,w);
    48764888        pDelete(&p0);
    48774889        j=IDELEMS(Q)-1;
     
    48964908  }
    48974909
     4910  if(v1->Typ()==MATRIX_CMD)
     4911    idDelete(&P);
     4912  if(v2->Typ()==MATRIX_CMD)
     4913    idDelete(&Q);
    48984914  omFree(w);
    48994915
     
    49044920  L->m[1].rtyp=MATRIX_CMD;
    49054921  L->m[1].data=(void *)U;
    4906   L->m[2].rtyp=typ;
    4907   L->m[2].data=(void *)R;
     4922  L->m[2].rtyp=v1->Typ();
     4923  if(v1->Typ()==MATRIX_CMD)
     4924    L->m[2].data=(void *)idModule2Matrix(R);
     4925  else
     4926    L->m[2].data=(void *)R;
    49084927  res->data=L;
    49094928  res->rtyp=LIST_CMD;
     
    55405559,{jjCALL2ARG,  COEF_CMD,        MATRIX_CMD,         2  }
    55415560,{jjCOEF_M,    COEF_CMD,        NONE,               4  }
     5561,{jjCALL2ARG,  DIVISION_CMD,    ANY_TYPE/*or set by p*/,2  }
     5562,{jjDIVISION4, DIVISION_CMD,    ANY_TYPE/*or set by p*/,4  }
    55425563,{jjDBPRINT,   DBPRINT_CMD,     NONE,               -2 }
    55435564,{jjCALL1ARG,  IDEAL_CMD,       IDEAL_CMD,          1  }
Note: See TracChangeset for help on using the changeset viewer.