Changeset 58c0e4 in git


Ignore:
Timestamp:
Jan 9, 2013, 5:43:52 PM (11 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
Children:
9b4920bf5fea321634ffb39fa954b2f172285c58
Parents:
4439f8edfe0644485f10799a19d3a9c37f1a9222
git-author:
Martin Lee <martinlee84@web.de>2013-01-09 17:43:52+01:00
git-committer:
Martin Lee <martinlee84@web.de>2013-02-18 15:00:48+01:00
Message:
chg: added some helper functions

Conflicts:

	factory/facFactorize.cc
	factory/facFqFactorize.cc
Location:
factory
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • factory/facFactorize.cc

    r4439f8e r58c0e4  
    413413
    414414  if (w.level() != 1)
    415   {
    416     A= swapvar (A, y, w);
    417     int i= A.level();
    418     CanonicalForm evalPoint;
    419     for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--)
    420     {
    421       if (i == w.level())
    422       {
    423         evalPoint= iter.getItem();
    424         iter.getItem()= evaluation.getLast();
    425         evaluation.removeLast();
    426         evaluation.append (evalPoint);
    427         break;
    428       }
    429     }
    430     for (i= 0; i < lengthAeval2; i++)
    431     {
    432       if (oldAeval[i].isEmpty())
    433         continue;
    434       if (oldAeval[i].getFirst().level() == w.level())
    435       {
    436         CFArray tmp= copy (oldAeval[i]);
    437         oldAeval[i]= biFactors;
    438         for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++)
    439           iter.getItem()= swapvar (iter.getItem(), w, y);
    440         for (int ii= 0; ii < tmp.size(); ii++)
    441           tmp[ii]= swapvar (tmp[ii], w, y);
    442         CFArray tmp2= CFArray (tmp.size());
    443         CanonicalForm buf;
    444         for (int ii= 0; ii < tmp.size(); ii++)
    445         {
    446           buf= tmp[ii] (evaluation.getLast(),y);
    447           buf /= Lc (buf);
    448           tmp2[findItem (uniFactors, buf)-1]=tmp[ii];
    449         }
    450         biFactors= CFList();
    451         for (int j= 0; j < tmp2.size(); j++)
    452           biFactors.append (tmp2[j]);
    453       }
    454     }
    455   }
    456 
    457   CFListIterator iter;
     415    changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2, uniFactors, w);
     416
    458417  CanonicalForm oldA= A;
    459418  CFList oldBiFactors= biFactors;
    460   if (!leadingCoeffs.getFirst().inCoeffDomain())
    461   {
    462     CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);
    463     A *= tmp;
    464     tmp= leadingCoeffs.getFirst();
    465     iter= leadingCoeffs;
    466     iter++;
    467     for (;iter.hasItem(); iter++)
    468       iter.getItem() *= tmp;
    469     iter= evaluation;
    470     for (int i= A.level(); i > 2; i--, iter++)
    471       tmp= tmp (iter.getItem(), i);
    472     if (!tmp.inCoeffDomain())
    473     {
    474       for (CFListIterator i= biFactors; i.hasItem(); i++)
    475       {
    476         i.getItem() *= tmp/LC (i.getItem(), 1);
    477         i.getItem() /= Lc (i.getItem());
    478       }
    479     }
    480   }
    481419
    482420  CanonicalForm LCmultiplier= leadingCoeffs.getFirst();
    483421  bool LCmultiplierIsConst= LCmultiplier.inCoeffDomain();
    484422  leadingCoeffs.removeFirst();
     423
     424  if (!LCmultiplierIsConst)
     425    distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier);
    485426
    486427  //prepare leading coefficients
     
    489430                        evaluation);
    490431
     432  CFListIterator iter;
    491433
    492434  Aeval= evaluateAtEval (A, evaluation, 2);
  • factory/facFqFactorize.cc

    r4439f8e r58c0e4  
    23442344}
    23452345
     2346void changeSecondVariable (CanonicalForm& A, CFList& biFactors, CFList& evaluation, CFList*& oldAeval, int lengthAeval2, const CFList& uniFactors, const Variable& w)
     2347{
     2348  Variable y= Variable (2);
     2349  A= swapvar (A, y, w);
     2350  int i= A.level();
     2351  CanonicalForm evalPoint;
     2352  for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--)
     2353  {
     2354    if (i == w.level())
     2355    {
     2356      evalPoint= iter.getItem();
     2357      iter.getItem()= evaluation.getLast();
     2358      evaluation.removeLast();
     2359      evaluation.append (evalPoint);
     2360      break;
     2361    }
     2362  }
     2363  for (i= 0; i < lengthAeval2; i++)
     2364  {
     2365    if (oldAeval[i].isEmpty())
     2366      continue;
     2367    if (oldAeval[i].getFirst().level() == w.level())
     2368    {
     2369      CFArray tmp= copy (oldAeval[i]);
     2370      oldAeval[i]= biFactors;
     2371      for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++)
     2372        iter.getItem()= swapvar (iter.getItem(), w, y);
     2373      for (int ii= 0; ii < tmp.size(); ii++)
     2374        tmp[ii]= swapvar (tmp[ii], w, y);
     2375      CFArray tmp2= CFArray (tmp.size());
     2376      CanonicalForm buf;
     2377      for (int ii= 0; ii < tmp.size(); ii++)
     2378      {
     2379        buf= tmp[ii] (evaluation.getLast(),y);
     2380        buf /= Lc (buf);
     2381        tmp2[findItem (uniFactors, buf)-1]=tmp[ii];
     2382      }
     2383      biFactors= CFList();
     2384      for (int j= 0; j < tmp2.size(); j++)
     2385        biFactors.append (tmp2[j]);
     2386    }
     2387  }
     2388}
     2389
     2390void distributeLCmultiplier (CanonicalForm& A, CFList& leadingCoeffs, CFList& biFactors, const CFList& evaluation, const CanonicalForm& LCmultipler)
     2391{
     2392  CanonicalForm tmp= power (LCmultipler, biFactors.length() - 1);
     2393  A *= tmp;
     2394  tmp= LCmultipler;
     2395  CFListIterator iter= leadingCoeffs;
     2396  for (;iter.hasItem(); iter++)
     2397    iter.getItem() *= LCmultipler;
     2398  iter= evaluation;
     2399  for (int i= A.level(); i > 2; i--, iter++)
     2400    tmp= tmp (iter.getItem(), i);
     2401  if (!tmp.inCoeffDomain())
     2402  {
     2403    for (CFListIterator i= biFactors; i.hasItem(); i++)
     2404    {
     2405      i.getItem() *= tmp/LC (i.getItem(), 1);
     2406      i.getItem() /= Lc (i.getItem());
     2407    }
     2408  }
     2409}
     2410
    23462411CFList
    23472412extFactorize (const CanonicalForm& F, const ExtensionInfo& info);
     
    27182783
    27192784  if (v.level() != 1)
    2720   {
    2721     A= swapvar (A, y, v);
    2722     int i= A.level();
    2723     CanonicalForm evalPoint;
    2724     for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--)
    2725     {
    2726       if (i == v.level())
    2727       {
    2728         evalPoint= iter.getItem();
    2729         iter.getItem()= evaluation.getLast();
    2730         evaluation.removeLast();
    2731         evaluation.append (evalPoint);
    2732         break;
    2733       }
    2734     }
    2735     for (i= 0; i < lengthAeval2; i++)
    2736     {
    2737       if (oldAeval[i].isEmpty())
    2738         continue;
    2739       if (oldAeval[i].getFirst().level() == v.level())
    2740       {
    2741         CFArray tmp= copy (oldAeval[i]);
    2742         oldAeval[i]= biFactors;
    2743         for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++)
    2744           iter.getItem()= swapvar (iter.getItem(), v, y);
    2745         for (int ii= 0; ii < tmp.size(); ii++)
    2746           tmp[ii]= swapvar (tmp[ii], v, y);
    2747         CFArray tmp2= CFArray (tmp.size());
    2748         CanonicalForm buf;
    2749         for (int ii= 0; ii < tmp.size(); ii++)
    2750         {
    2751           buf= tmp[ii] (evaluation.getLast(),y);
    2752           buf /= Lc (buf);
    2753           tmp2[findItem (uniFactors, buf)-1]=tmp[ii];
    2754         }
    2755         biFactors= CFList();
    2756         for (int j= 0; j < tmp2.size(); j++)
    2757           biFactors.append (tmp2[j]);
    2758       }
    2759     }
    2760   }
    2761 
    2762   CFListIterator iter;
     2785    changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2, uniFactors, v);
     2786
    27632787  CanonicalForm oldA= A;
    27642788  CFList oldBiFactors= biFactors;
    2765   if (!leadingCoeffs.getFirst().inCoeffDomain())
    2766   {
    2767     CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);
    2768     A *= tmp;
    2769     tmp= leadingCoeffs.getFirst();
    2770     iter= leadingCoeffs;
    2771     iter++;
    2772     for (;iter.hasItem(); iter++)
    2773       iter.getItem() *= tmp;
    2774     iter= evaluation;
    2775     for (int i= A.level(); i > 2; i--, iter++)
    2776       tmp= tmp (iter.getItem(), i);
    2777     if (!tmp.inCoeffDomain())
    2778     {
    2779       for (CFListIterator i= biFactors; i.hasItem(); i++)
    2780       {
    2781         i.getItem() *= tmp/LC (i.getItem(), 1);
    2782         i.getItem() /= Lc (i.getItem());
    2783       }
    2784     }
    2785   }
    27862789
    27872790  CanonicalForm LCmultiplier= leadingCoeffs.getFirst();
    27882791  bool LCmultiplierIsConst= LCmultiplier.inCoeffDomain();
    27892792  leadingCoeffs.removeFirst();
     2793
     2794  if (!LCmultiplierIsConst)
     2795    distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier);
    27902796
    27912797  //prepare leading coefficients
     
    27942800                        evaluation);
    27952801
     2802  CFListIterator iter;
    27962803  Aeval= evaluateAtEval (A, evaluation, 2);
    27972804  CanonicalForm hh= 1/Lc (Aeval.getFirst());
  • factory/facFqFactorize.h

    r4439f8e r58c0e4  
    684684                       );
    685685
     686void changeSecondVariable (CanonicalForm& A, CFList& biFactors, CFList& evaluation, CFList*& oldAeval, int lengthAeval2, const CFList& uniFactors, const Variable& w);
     687void distributeLCmultiplier (CanonicalForm& A, CFList& leadingCoeffs, CFList& biFactors, const CFList& evaluation, const CanonicalForm& LCmultipler);
     688
    686689#endif
    687690/* FAC_FQ_FACTORIZE_H */
Note: See TracChangeset for help on using the changeset viewer.