Changeset 3163a2 in git for factory/facFactorize.cc


Ignore:
Timestamp:
Jan 10, 2013, 3:04:45 PM (11 years ago)
Author:
Martin Lee <martinlee84@…>
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
Message:
chg: extracted more parts of LCHeuristic

Conflicts:

	factory/facFqFactorize.cc
	factory/facFqFactorize.h
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/facFactorize.cc

    r4505ca r3163a2  
    430430                        biFactors, evaluation);
    431431
    432   CFListIterator iter2, iter;
     432  CFListIterator iter;
    433433  CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1];
    434434  bufBiFactors= biFactors;
    435435  bufA= A;
    436   CanonicalForm bufLCmultiplier= LCmultiplier;
    437   CanonicalForm testVars;
     436  CanonicalForm testVars, bufLCmultiplier= LCmultiplier;
    438437  if (!LCmultiplierIsConst)
    439438  {
     
    506505      LCheuristic= true;
    507506      factors= oldFactors;
    508       CanonicalForm cont;
    509507      CFList contents, LCs;
    510       int index=1;
    511508      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      {
    528512          A= oldA;
    529513          leadingCoeffs= leadingCoeffs2[lengthAeval2-1];
     
    532516          prepareLeadingCoeffs (leadingCoeffs2, A, Aeval, A.level(),
    533517                                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      {
    543521        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);
    582523        // coming from above: divide out more LCmultiplier if possible
    583524        if (foundMultiplier)
    584525        {
    585526          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);
    644528        }
    645529        else
    646530        {
    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);
    656533          if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars))
    657534          {
     
    751628    commonDenominators.append (bCommonDen (iter.getItem()));
    752629  CanonicalForm tmp1, tmp2, tmp3=1;
     630  CFListIterator iter2;
    753631  for (int i= 0; i < lengthAeval2; i++)
    754632  {
Note: See TracChangeset for help on using the changeset viewer.