Changeset 3163a2 in git for factory/facFactorize.cc
- Timestamp:
- Jan 10, 2013, 3:04:45 PM (11 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- e8880a0b01758b6b968ac3c91e6538157a2cb836
- Parents:
- 4505ca15be27a1d26c6a46880debf164fc3d31b0
- git-author:
- Martin Lee <martinlee84@web.de>2013-01-10 15:04:45+01:00
- git-committer:
- Martin Lee <martinlee84@web.de>2013-02-18 15:01:20+01:00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/facFactorize.cc
r4505ca r3163a2 430 430 biFactors, evaluation); 431 431 432 CFListIterator iter 2, iter;432 CFListIterator iter; 433 433 CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1]; 434 434 bufBiFactors= biFactors; 435 435 bufA= A; 436 CanonicalForm bufLCmultiplier= LCmultiplier; 437 CanonicalForm testVars; 436 CanonicalForm testVars, bufLCmultiplier= LCmultiplier; 438 437 if (!LCmultiplierIsConst) 439 438 { … … 506 505 LCheuristic= true; 507 506 factors= oldFactors; 508 CanonicalForm cont;509 507 CFList contents, LCs; 510 int index=1;511 508 bool foundTrueMultiplier= false; 512 for (iter= factors; iter.hasItem(); iter++, index++) 513 { 514 cont= content (iter.getItem(), 1); 515 cont= gcd (cont , LCmultiplier); 516 contents.append (cont); 517 if (cont.inCoeffDomain()) // trivial content->LCmultiplier needs to go there 518 { 519 foundTrueMultiplier= true; 520 int index2= 1; 521 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++, 522 index2++) 523 { 524 if (index2 == index) 525 continue; 526 iter2.getItem() /= LCmultiplier; 527 } 509 LCHeuristic3 (LCmultiplier, factors, leadingCoeffs2[lengthAeval2-1], contents, LCs, foundTrueMultiplier); 510 if (foundTrueMultiplier) 511 { 528 512 A= oldA; 529 513 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; … … 532 516 prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(), 533 517 leadingCoeffs, biFactors, evaluation); 534 break; 535 } 536 else 537 LCs.append (LC (iter.getItem()/cont, 1)); 538 } 539 if (!foundTrueMultiplier) 540 { 541 index= 1; 542 iter2= factors; 518 } 519 else 520 { 543 521 bool foundMultiplier= false; 544 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 545 { 546 if (fdivides (iter.getItem(), LCmultiplier)) 547 { 548 if ((LCmultiplier/iter.getItem()).inCoeffDomain() && 549 !isOnlyLeadingCoeff(iter2.getItem())) //content divides LCmultiplier completely and factor consists of more terms than just the leading coeff 550 { 551 Variable xx= Variable (2); 552 CanonicalForm vars; 553 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 554 xx)); 555 for (int i= 0; i < lengthAeval2; i++) 556 { 557 if (oldAeval[i].isEmpty()) 558 continue; 559 xx= oldAeval[i].getFirst().mvar(); 560 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 561 xx)); 562 } 563 if (vars.level() <= 2) 564 { 565 int index2= 1; 566 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1]; 567 iter3.hasItem(); iter3++, index2++) 568 { 569 if (index2 == index) 570 { 571 iter3.getItem() /= LCmultiplier; 572 break; 573 } 574 } 575 A /= LCmultiplier; 576 foundMultiplier= true; 577 iter.getItem()= 1; 578 } 579 } 580 } 581 } 522 LCHeuristic4 (LCmultiplier, factors, oldBiFactors, contents, oldAeval, A, leadingCoeffs2, lengthAeval2, foundMultiplier); 582 523 // coming from above: divide out more LCmultiplier if possible 583 524 if (foundMultiplier) 584 525 { 585 526 foundMultiplier= false; 586 index=1; 587 iter2= factors; 588 for (iter= contents; iter.hasItem(); iter++, iter2++, index++) 589 { 590 if (!iter.getItem().isOne() && 591 fdivides (iter.getItem(), LCmultiplier)) 592 { 593 if (!isOnlyLeadingCoeff (iter2.getItem())) // factor is more than just leading coeff 594 { 595 int index2= 1; 596 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 597 iter2++, index2++) 598 { 599 if (index2 == index) 600 { 601 iter2.getItem() /= iter.getItem(); 602 foundMultiplier= true; 603 break; 604 } 605 } 606 A /= iter.getItem(); 607 LCmultiplier /= iter.getItem(); 608 iter.getItem()= 1; 609 } 610 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 611 { 612 Variable xx= Variable (2); 613 CanonicalForm vars; 614 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 615 xx)); 616 for (int i= 0; i < lengthAeval2; i++) 617 { 618 if (oldAeval[i].isEmpty()) 619 continue; 620 xx= oldAeval[i].getFirst().mvar(); 621 vars *= power (xx, degree (LC (getItem(oldAeval[i], index),1), 622 xx)); 623 } 624 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1)) 625 /myGetVars (LCmultiplier) == vars) 626 { 627 int index2= 1; 628 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 629 iter2++, index2++) 630 { 631 if (index2 == index) 632 { 633 iter2.getItem() /= LCmultiplier; 634 foundMultiplier= true; 635 break; 636 } 637 } 638 A /= LCmultiplier; 639 iter.getItem()= 1; 640 } 641 } 642 } 643 } 527 LCHeuristic5 (oldBiFactors, oldAeval, contents, factors, testVars, lengthAeval2, leadingCoeffs2, A, LCmultiplier, foundMultiplier); 644 528 } 645 529 else 646 530 { 647 CanonicalForm pLCs= prod (LCs); 648 if (fdivides (pLCs, LC (oldA,1)) && (LC(oldA,1)/pLCs).inCoeffDomain()) // check if the product of the lead coeffs of the primitive factors equals the lead coeff of the old A 649 { 650 A= oldA; 651 iter2= leadingCoeffs2[lengthAeval2-1]; 652 for (iter= contents; iter.hasItem(); iter++, iter2++) 653 iter2.getItem() /= iter.getItem(); 654 foundMultiplier= true; 655 } 531 LCHeuristic2 (LCs, contents, A, oldA, leadingCoeffs2[lengthAeval2-1], 532 foundMultiplier); 656 533 if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars)) 657 534 { … … 751 628 commonDenominators.append (bCommonDen (iter.getItem())); 752 629 CanonicalForm tmp1, tmp2, tmp3=1; 630 CFListIterator iter2; 753 631 for (int i= 0; i < lengthAeval2; i++) 754 632 {
Note: See TracChangeset
for help on using the changeset viewer.