Changeset 594652 in git
- Timestamp:
- Sep 22, 2022, 12:09:05 PM (19 months ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 5bec8f88c9ee2573d328cf7c3aff2bcb301d2395
- Parents:
- dfe0aba7819331fbb350a4fae5165e4edf3b13ab
- git-author:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2022-09-22 12:09:05+02:00
- git-committer:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2022-09-22 13:44:03+02:00
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/combinatorics/hilb.cc
rdfe0ab r594652 1708 1708 { 1709 1709 // e=max(0,p-q) for all exps 1710 for(int i=1;i<=src->N;i++) 1711 { 1712 p_SetExp(p,i,si_max(0L,p_GetExp(p,i,src)-exp_q[i]),src); 1710 for(int i=src->N;i>0;i--) 1711 { 1712 int pi=p_GetExp(p,i,src)-exp_q[i]; 1713 if (pi<0) pi=0; 1714 p_SetExp(p,i,pi,src); 1713 1715 } 1714 1716 #ifdef PDEBUG … … 1800 1802 //idSkipZeroes(J); 1801 1803 ideal J=id_CopyFirstK(A,i,src); 1802 for(int ii= 1;ii<=src->N;ii++)1804 for(int ii=src->N;ii>0;ii--) 1803 1805 exp_q[ii]=p_GetExp(A->m[i],ii,src); 1804 1806 for(int ii=0;ii<i;ii++) p_Div_hi(J->m[ii],exp_q,src); 1805 id_DelDiv _Sorted(J,src);1807 id_DelDiv(J,src); 1806 1808 // search linear elems: 1807 1809 int k=0; … … 1811 1813 { 1812 1814 k++; 1813 p_ Delete(&J->m[ii],src);1815 p_LmDelete(&J->m[ii],src); 1814 1816 } 1815 1817 } … … 1889 1891 } 1890 1892 else AA=A; 1891 id_DelDiv _Sorted(AA,src);1893 id_DelDiv(AA,src); 1892 1894 idSkipZeroes(AA); 1893 1895 /* sort */ -
libpolys/polys/simpleideals.cc
rdfe0ab r594652 349 349 } 350 350 351 /// delete id[j], if LT(j) == coeff*mon*LT(i) (j>i)351 /// delete id[j], if LT(j) == coeff*mon*LT(i) 352 352 static void id_DelDiv_SEV(ideal id, int k,const ring r) 353 353 { … … 355 355 long *sev=(long*)omAlloc0(kk*sizeof(long)); 356 356 while(id->m[k]==NULL) k--; 357 BOOLEAN only_lm=r->cf->has_simple_Alloc; 358 if (!only_lm) 359 { 360 for (int i=k; i>=0; i--) 361 { 362 if((id->m[i]!=NULL) && (pNext(id->m[i])!=NULL)) 363 { 364 only_lm=FALSE; 365 break; 366 } 367 } 368 } 357 369 for (int i=k; i>=0; i--) 358 370 { 359 371 if(id->m[i]!=NULL) 372 { 360 373 sev[i]=p_GetShortExpVector(id->m[i],r); 361 } 362 for (int i=0; i<k; i++) 363 { 364 if (id->m[i] != NULL) 365 { 366 poly m_i=id->m[i]; 367 for (int j=i+1; j<=k; j++) 368 { 369 if (id->m[j]!=NULL) 374 } 375 } 376 if (only_lm) 377 { 378 for (int i=0; i<k; i++) 379 { 380 if (id->m[i] != NULL) 381 { 382 poly m_i=id->m[i]; 383 long sev_i=sev[i]; 384 for (int j=i+1; j<=k; j++) 370 385 { 371 if ( p_LmShortDivisibleBy(m_i, sev[i],r, id->m[j],~sev[j],r))386 if (id->m[j]!=NULL) 372 387 { 373 p_Delete(&id->m[j],r); 374 } 375 else if (p_LmShortDivisibleBy(id->m[j],sev[j],r, m_i,~sev[i],r)) 376 { 377 p_Delete(&id->m[i],r); 378 break; 388 if (p_LmShortDivisibleBy(m_i, sev_i,r, id->m[j],~sev[j],r)) 389 { 390 p_LmFree(&id->m[j],r); 391 } 392 else if (p_LmShortDivisibleBy(id->m[j],sev[j],r, m_i,~sev_i,r)) 393 { 394 p_LmFree(&id->m[i],r); 395 break; 396 } 379 397 } 380 398 } … … 382 400 } 383 401 } 384 omFreeSize(sev,kk*sizeof(long)); 385 } 386 387 /// delete id[j], if LT(j) == coeff*mon*LT(i) (j>i) 388 /// assume LC(j)==NULL or n_Delete==ndDelete 389 static void id_DelDiv_SEV0(ideal id, int k,const ring r) 390 { 391 int kk = k+1; 392 long *sev=(long*)omAlloc0(kk*sizeof(long)); 393 while(id->m[k]==NULL) k--; 394 for (int i=k; i>=0; i--) 395 { 396 if(id->m[i]!=NULL) 397 sev[i]=p_GetShortExpVector(id->m[i],r); 398 } 399 for (int i=0; i<k; i++) 400 { 401 if (id->m[i] != NULL) 402 { 403 poly m_i=id->m[i]; 404 for (int j=i+1; j<=k; j++) 405 { 406 if (id->m[j]!=NULL) 402 else 403 { 404 for (int i=0; i<k; i++) 405 { 406 if (id->m[i] != NULL) 407 { 408 poly m_i=id->m[i]; 409 long sev_i=sev[i]; 410 for (int j=i+1; j<=k; j++) 407 411 { 408 if ( p_LmShortDivisibleBy(m_i, sev[i],r, id->m[j],~sev[j],r))412 if (id->m[j]!=NULL) 409 413 { 410 p_LmFree(&id->m[j],r); 411 } 412 else if (p_LmShortDivisibleBy(id->m[j],sev[j],r, m_i,~sev[i],r)) 413 { 414 p_LmFree(&id->m[i],r); 415 break; 414 if (p_LmShortDivisibleBy(m_i, sev_i,r, id->m[j],~sev[j],r)) 415 { 416 p_Delete(&id->m[j],r); 417 } 418 else if (p_LmShortDivisibleBy(id->m[j],sev[j],r, m_i,~sev_i,r)) 419 { 420 p_Delete(&id->m[i],r); 421 break; 422 } 416 423 } 417 424 } … … 487 494 } 488 495 } 489 }490 491 /// delete id[j], if LT(j) == coeff*mon*LT(i) (j>i)492 void id_DelDiv_Sorted(ideal id, const ring r)493 {494 int k = IDELEMS(id)-1;495 if (r->cf->has_simple_Alloc)496 id_DelDiv_SEV0(id,k,r);497 else498 id_DelDiv_SEV(id,k,r);499 496 } 500 497 … … 1396 1393 ideal m = idInit(IDELEMS(h),h->rank); 1397 1394 1398 for (int i=IDELEMS(h)-1;i>=0; i--) 1399 if (h->m[i]!=NULL) 1400 m->m[i]=p_Head(h->m[i],r); 1395 if (r->cf->has_simple_Alloc) 1396 { 1397 for (int i=IDELEMS(h)-1;i>=0; i--) 1398 if (h->m[i]!=NULL) 1399 m->m[i]=p_CopyPowerProduct0(h->m[i],pGetCoeff(h->m[i]),r); 1400 } 1401 else 1402 { 1403 for (int i=IDELEMS(h)-1;i>=0; i--) 1404 if (h->m[i]!=NULL) 1405 m->m[i]=p_Head(h->m[i],r); 1406 } 1401 1407 1402 1408 return m; -
libpolys/polys/simpleideals.h
rdfe0ab r594652 110 110 void id_DelLmEquals(ideal id, const ring r); 111 111 void id_DelDiv(ideal id, const ring r); 112 void id_DelDiv_Sorted(ideal id, const ring r);113 112 BOOLEAN id_IsConstant(ideal id, const ring r); 114 113
Note: See TracChangeset
for help on using the changeset viewer.