Changeset eab144e in git for kernel/f5gb.cc
- Timestamp:
- Feb 19, 2009, 3:52:34 PM (15 years ago)
- Branches:
- (u'spielwiese', '5b153614cbc72bfa198d75b1e9e33dab2645d9fe')
- Children:
- 4b81d7545fc37e400fa5c0f38007dab086da9031
- Parents:
- d51339db6eb09b5d56b6c91884e2abedf4f5b7b6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/f5gb.cc
rd51339 reab144e 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: f5gb.cc,v 1.3 0 2009-02-18 20:43:05ederc Exp $ */4 /* $Id: f5gb.cc,v 1.31 2009-02-19 14:52:34 ederc Exp $ */ 5 5 /* 6 6 * ABSTRACT: f5gb interface … … 71 71 LList* F5inc(int i, poly f_i, LList* gPrev, ideal gbPrev, poly ONE, LTagList* lTag, RList* rules, RTagList* rTag) { 72 72 int j; 73 Print("%p\n",gPrev->getFirst());74 pWrite(gPrev->getFirst()->getPoly());73 //Print("%p\n",gPrev->getFirst()); 74 //pWrite(gPrev->getFirst()->getPoly()); 75 75 gPrev->insert(ONE,i,f_i); 76 76 // tag the first element in gPrev of the current index for findReductor() 77 77 lTag->setFirstCurrentIdx(gPrev->getFirst()); 78 Print("1st gPrev: ");79 pWrite(gPrev->getFirst()->getPoly());80 Print("2nd gPrev: ");81 pWrite(gPrev->getFirst()->getNext()->getPoly());78 //Print("1st gPrev: "); 79 //pWrite(gPrev->getFirst()->getPoly()); 80 //Print("2nd gPrev: "); 81 //pWrite(gPrev->getFirst()->getNext()->getPoly()); 82 82 //pWrite(gPrev->getFirst()->getNext()->getPoly()); 83 83 CList* critPairs = new CList(); … … 128 128 pWrite(tempTag->getPoly()); 129 129 Print("COMPLETED FIRST IN F5INC: \n"); 130 Print("1st gPrev: ");131 pWrite(gPrev->getFirst()->getPoly());132 Print("2nd gPrev: ");133 pWrite(gPrev->getFirst()->getNext()->getPoly());134 Print("3rd gPrev: ");135 pWrite(gPrev->getFirst()->getNext()->getNext()->getPoly());130 //Print("1st gPrev: "); 131 //pWrite(gPrev->getFirst()->getPoly()); 132 //Print("2nd gPrev: "); 133 //pWrite(gPrev->getFirst()->getNext()->getPoly()); 134 //Print("3rd gPrev: "); 135 //pWrite(gPrev->getFirst()->getNext()->getNext()->getPoly()); 136 136 137 137 … … 157 157 poly lcm = pOne(); 158 158 poly t = pHead(newElement->getPoly()); 159 Rule* testedRule = rules->getFirst()->getRule(); 159 160 // computation of critical pairs 160 161 while( gPrev->getLast() != temp) { 161 162 //pWrite( *(gPrev->getFirst()->getPoly()) ); 162 //pWrite( *(l->getPoly()) );163 // pWrite( *(l->getPoly()) ); 163 164 pLcm(newElement->getPoly(), temp->getPoly(), lcm); 164 165 pSetCoeff(lcm,nOne); … … 180 181 // label as first element in the CPair 181 182 if(newElement->getIndex() == temp->getIndex() && 182 ppMult_qq(u1, newElement->getTerm()) < ppMult_qq(u2, temp->getTerm())) { 183 -1 == pLmCmp(ppMult_qq(u1, newElement->getTerm()),ppMult_qq(u2, temp->getTerm()))) { 184 Print("zweites groesser\n"); 183 185 CPair* cp = new CPair(pDeg(ppMult_qq(u2,pHead(temp->getPoly()))), u2, 184 temp->getLPoly(), u1, newElement->getLPoly() );186 temp->getLPoly(), u1, newElement->getLPoly(), testedRule); 185 187 critPairs->insert(cp); 186 188 } 187 189 else { 190 Print("erstes groesser\n"); 188 191 CPair* cp = new CPair(pDeg(ppMult_qq(u2,pHead(temp->getPoly()))), u1, 189 newElement->getLPoly(), u2, temp->getLPoly() );192 newElement->getLPoly(), u2, temp->getLPoly(), testedRule); 190 193 critPairs->insert(cp); 191 194 } … … 203 206 } 204 207 205 206 207 /*208 ================================================================209 computes a list of critical pairs for the next reduction process210 first element in gPrev is always the newest element which must211 build critical pairs with all other elements in gPrev212 NOTE: this is a special version for the call inside reduction()213 which adds to the already existing critical pairs new ones214 ================================================================215 */216 void criticalPairRed(LList* gPrev, CList* critPairs, LTagList* lTag, RTagList* rTag, RList* rules) {217 // initialization for usage in pLcm()218 number nOne = nInit(1);219 LNode* newElement = gPrev->getLast();220 LNode* temp = gPrev->getFirst();221 poly u1 = pOne();222 poly u2 = pOne();223 poly lcm = pOne();224 poly t = pHead(newElement->getPoly());225 // computation of critical pairs226 while( gPrev->getLast() != temp) {227 //pWrite( *(gPrev->getFirst()->getPoly()) );228 //pWrite( *(l->getPoly()) );229 pLcm(newElement->getPoly(), temp->getPoly(), lcm);230 pSetCoeff(lcm,nOne);231 // computing factors u2 for new labels232 u1 = pDivide(lcm,t);233 pSetCoeff(u1,nOne);234 u2 = pDivide(lcm, pHead(temp->getPoly()));235 pSetCoeff(u2,nOne);236 Print("IN CRITPAIRS\n");237 // testing both new labels by the F5 Criterion238 if(!criterion1(gPrev,u1, newElement, lTag) && !criterion1(gPrev,u2, temp, lTag) &&239 !criterion2(u1, newElement, rules, rTag) && !criterion2(u2, temp, rules, rTag)) {240 // if they pass the test, add them to CList critPairs, having the LPoly with greater241 // label as first element in the CPair242 if(newElement->getIndex() == temp->getIndex() &&243 pMult(u1, newElement->getTerm()) < pMult(u2, temp->getTerm())) {244 CPair* cp = new CPair(pDeg(ppMult_qq(u2,pHead(temp->getPoly()))), u2,245 temp->getLPoly(), u1, newElement->getLPoly());246 critPairs->insert(cp);247 }248 else {249 CPair* cp = new CPair(pDeg(ppMult_qq(u2,pHead(temp->getPoly()))), u1,250 newElement->getLPoly(), u2, temp->getLPoly());251 critPairs->insert(cp);252 }253 }254 else {255 }256 257 258 temp = temp->getNext();259 }260 // for debugging261 if(NULL != critPairs) {262 critPairs->print();263 }264 }265 208 266 209 … … 293 236 return true; 294 237 } 295 //pWrite(testNode->getNext()->getPoly());238 pWrite(testNode->getNext()->getPoly()); 296 239 testNode = testNode->getNext(); 297 240 } … … 357 300 ================================================================================================================= 358 301 */ 359 bool criterion2(poly t, LPoly* l, RList* rules, Rule* lastRuleTested) {302 bool criterion2(poly t, LPoly* l, RList* rules, Rule* testedRule) { 360 303 Print("------------------------------IN CRITERION 2-----------------------------------------\n"); 361 Print("LAST RULE TESTED: %p", lastRuleTested);304 Print("LAST RULE TESTED: %p",testedRule); 362 305 Print("RULES: \n"); 363 306 RNode* tempR = rules->getFirst(); … … 376 319 poly u1 = ppMult_qq(t,l->getTerm()); 377 320 // first element added to rTag was NULL, check for this 378 while(NULL != testNode->getRule() && testNode->getRule() != lastRuleTested) {321 while(NULL != testNode->getRule() && testNode->getRule() != testedRule) { 379 322 pWrite(testNode->getRuleTerm()); 380 323 if(pLmDivisibleBy(testNode->getRuleTerm(),ppMult_qq(t,l->getTerm()))) { … … 384 327 testNode = testNode->getNext(); 385 328 } 386 lastRuleTested = testNode->getRule();387 329 return false; 388 330 } … … 398 340 CNode* temp = first; 399 341 poly sp = pInit(); 400 Print("###############################IN SPOLS##############################\n");342 //Print("###############################IN SPOLS##############################\n"); 401 343 while(NULL != temp->getData()) { 402 344 // only if a new rule was added since the last test in subalgorithm criticalPair() 403 345 //if(rules->getFirst() != rTag->getFirst()) { 404 if(!criterion2(temp->getT1(),temp->getAdLp1(),rules,temp->get LastRuleTested())) {346 if(!criterion2(temp->getT1(),temp->getAdLp1(),rules,temp->getTestedRule())) { 405 347 // the second component is tested only when it has the actual index, otherwise there is 406 348 // no new rule to test since the last test in subalgorithm criticalPair() 407 349 if(temp->getLp2Index() == temp->getLp1Index()) { 408 if(!criterion2(temp->getT2(),temp->getAdLp2(),rules,temp->get LastRuleTested())) {350 if(!criterion2(temp->getT2(),temp->getAdLp2(),rules,temp->getTestedRule())) { 409 351 // computation of S-polynomial 410 352 sp = pSub(ppMult_qq(temp->getT1(),temp->getLp1Poly()), 411 353 ppMult_qq(temp->getT2(),temp->getLp2Poly())); 412 354 Print("BEGIN SPOLY1\n====================\n"); 355 pNorm(sp); 413 356 pWrite(sp); 414 357 Print("END SPOLY1\n====================\n"); … … 422 365 Print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ZERO REDUCTION~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 423 366 reductionsToZero++; 424 rules->insert(temp->getLp1Index(), temp->getT1());367 rules->insert(temp->getLp1Index(),ppMult_qq(temp->getT1(),temp->getLp1Term())); 425 368 Print("RULE ADDED: \n"); 426 369 pWrite(rules->getFirst()->getRuleTerm()); 427 370 // as sp = NULL, delete it 428 delete(&sp); 371 pDelete(&sp); 372 Print("HIER\n"); 429 373 } 430 374 else { 431 rules->insert(temp->getLp1Index(), temp->getT1());375 rules->insert(temp->getLp1Index(),ppMult_qq(temp->getT1(),temp->getLp1Term())); 432 376 Print("RULE ADDED: \n"); 433 377 pWrite(rules->getFirst()->getRuleTerm()); 434 sPolyList->insertSP( temp->getT1(),temp->getLp1Index(),sp,rules->getFirst()->getRule());378 sPolyList->insertSP(ppMult_qq(temp->getT1(),temp->getLp1Term()),temp->getLp1Index(),sp,rules->getFirst()->getRule()); 435 379 } 436 380 // data is saved in sPolyList or zero => delete sp … … 452 396 Print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ZERO REDUCTION~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); 453 397 reductionsToZero++; 454 rules->insert(temp->getLp1Index(), temp->getT1());398 rules->insert(temp->getLp1Index(),ppMult_qq(temp->getT1(),temp->getLp1Term())); 455 399 Print("RULE ADDED: \n"); 456 400 pWrite(rules->getFirst()->getRuleTerm()); 457 401 // as sp = NULL, delete it 458 delete(&sp);402 pDelete(&sp); 459 403 } 460 404 else { 461 rules->insert(temp->getLp1Index(), temp->getT1());405 rules->insert(temp->getLp1Index(),ppMult_qq(temp->getT1(),temp->getLp1Term())); 462 406 Print("RULE ADDED: \n"); 463 407 pWrite(rules->getFirst()->getRuleTerm()); 464 408 Print("%p\n",sPolyList->getFirst()); 465 sPolyList->insertSP( temp->getT1(),temp->getLp1Index(),sp,rules->getFirst()->getRule());409 sPolyList->insertSP(ppMult_qq(temp->getT1(),temp->getLp1Term()),temp->getLp1Index(),sp,rules->getFirst()->getRule()); 466 410 } 467 411 // data is saved in sPolyList or zero => delete sp … … 473 417 // these critical pairs can be deleted now as they are either useless for further computations or 474 418 // already saved as an S-polynomial to be reduced in the following 475 //pDelete(&sp);476 419 delete first; 477 420 } … … 589 532 Print("ADDED TO GPREV IN TOPREDUCTION: "); 590 533 pWrite(l->getPoly()); 534 pWrite(l->getTerm()); 591 535 gPrev->insert(l->getLPoly()); 592 536 Print("GPREV: \n");
Note: See TracChangeset
for help on using the changeset viewer.