Changeset 110345 in git
- Timestamp:
- Feb 28, 2002, 6:56:34 PM (21 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'f875bbaccd0831e36aaed09ff6adeb3eb45aeb94')
- Children:
- 52dd16ad91baa99ad289271833061020c2611bab
- Parents:
- ca333242d1ba897a923f436babbc49409e97d8ff
- Location:
- Singular
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/ideals.cc
rca3332 r110345 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: ideals.cc,v 1.12 6 2002-01-19 14:48:16 obachmanExp $ */4 /* $Id: ideals.cc,v 1.127 2002-02-28 17:56:33 mschulze Exp $ */ 5 5 /* 6 6 * ABSTRACT - all basic methods to manipulate ideals … … 1886 1886 1887 1887 /*2 1888 *computes division of P by Q with remainder up to weighted degree n 1889 *P, Q, and w are not changed 1890 */ 1891 lists 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 1888 1950 *computes the quotient of h1,h2 : interanl routine for idQuot 1889 1951 *BEWARE: the returned ideals may contain incorrected orderd polys ! -
Singular/ideals.h
rca3332 r110345 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: ideals.h,v 1.3 6 2002-01-19 14:48:16 obachmanExp $ */6 /* $Id: ideals.h,v 1.37 2002-02-28 17:56:33 mschulze Exp $ */ 7 7 /* 8 8 * ABSTRACT - all basic methods to manipulate ideals … … 97 97 matrix *unit=NULL); 98 98 99 lists idLiftW (ideal P, ideal Q, int n, short *w); 100 99 101 intvec * idMWLift(ideal mod,intvec * weights); 100 102 -
Singular/iparith.cc
rca3332 r110345 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: iparith.cc,v 1.27 7 2002-02-26 12:25:17mschulze Exp $ */4 /* $Id: iparith.cc,v 1.278 2002-02-28 17:56:34 mschulze Exp $ */ 5 5 6 6 /* … … 4827 4827 if(i1==0||i2==0||v3->Typ()!=INT_CMD||v4->Typ()!=INTVEC_CMD) 4828 4828 { 4829 Warn ("<module>,<module>,<int>,<intvec> expected!");4829 WarnS("<module>,<module>,<int>,<intvec> expected!"); 4830 4830 return TRUE; 4831 4831 } … … 4840 4840 short *w=iv2array((intvec *)v4->Data()); 4841 4841 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); 4886 4853 4887 4854 omFree(w); 4888 4855 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;4893 4856 L->m[1].rtyp=v1->Typ(); 4857 ideal R=(ideal)L->m[1].data; 4894 4858 if(v1->Typ()==POLY_CMD||v1->Typ()==VECTOR_CMD) 4895 4859 { 4896 L->m[1].data=(void *)pCopy(R->m[0]); 4860 L->m[1].data=(void *)R->m[0]; 4861 R->m[0]=NULL; 4897 4862 idDelete(&R); 4898 4863 } 4899 else if(v1->Typ()==IDEAL_CMD||v1->Typ()==MODUL_CMD)4900 L->m[1].data=(void *)R;4901 4864 else if(v1->Typ()==MATRIX_CMD) 4902 4865 L->m[1].data=(void *)idModule2Matrix(R); 4903 else 4904 { 4866 else if(v1->Typ()!=IDEAL_CMD&&v1->Typ()!=MODUL_CMD) 4905 4867 L->m[1].rtyp=MODUL_CMD; 4906 L->m[1].data=(void *)R;4907 }4908 4868 res->data=L; 4909 4869 res->rtyp=LIST_CMD;
Note: See TracChangeset
for help on using the changeset viewer.