Changeset eefc3a in git


Ignore:
Timestamp:
Dec 1, 2011, 6:37:22 PM (12 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'c5facdfddea2addfd91babd8b9019161dea4b695')
Children:
4fe8a30d668fa6f87de68f0c0207d54767119a52
Parents:
91788c087460478b3feb0c0461c30cb0383129fe
git-author:
Martin Lee <martinlee84@web.de>2011-12-01 18:37:22+01:00
git-committer:
Oleksandr Motsak <motsak@mathematik.uni-kl.de>2011-12-12 18:00:42+01:00
Message:
chg: postpone shifting of evaluation point to zero until it is really needed
Location:
factory
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • factory/facFactorize.cc

    r91788c0 reefc3a  
    139139testFactors (const CanonicalForm& G, const CFList& uniFactors,
    140140             CanonicalForm& sqrfPartF, CFList& factors,
    141              CFFList*& bufSqrfFactors, CFList& evalSqrfPartF)
     141             CFFList*& bufSqrfFactors, CFList& evalSqrfPartF,
     142             const CFArray& evalPoint)
    142143{
    143144  CanonicalForm tmp;
     
    164165    sqrfPartF *= i.getItem().factor();
    165166
    166   evalSqrfPartF= evaluateAtZero (sqrfPartF);
    167 
    168   CanonicalForm test= evalSqrfPartF.getFirst() (0, 2);
     167  evalSqrfPartF= evaluateAtEval (sqrfPartF, evalPoint);
     168
     169  CanonicalForm test= evalSqrfPartF.getFirst() (evalPoint[0], 2);
    169170
    170171  if (degree (test) != degree (sqrfPartF, 1))
     
    229230
    230231  test= prod (factors);
    231   tmp= evalSqrfPartF.getFirst() (0,2);
     232  tmp= evalSqrfPartF.getFirst() (evalPoint[0],2);
    232233  if (test/Lc (test) != tmp/Lc (tmp))
    233234    return 0;
     
    262263    //bivariate leading coefficients are already the true leading coefficients
    263264      result= LCFFactors;
    264       Variable v= Variable (LCF.mvar());
    265       CanonicalForm bla= 1;
    266       for (CFListIterator i= result; i.hasItem(); i++)
    267       {
    268         i.getItem()= i.getItem() (v+evaluation.getLast(), v);
    269         bla *= Lc (i.getItem());
    270       }
    271265      found= true;
    272266    }
     
    304298  CFMap dummy;
    305299  for (CFListIterator i= factors; i.hasItem(); i++)
    306   {
    307300    i.getItem()= compress (i.getItem(), dummy);
    308     i.getItem()= i.getItem() (Variable (1)+evaluation.getLast(), Variable (1));
    309   }
    310301
    311302  CanonicalForm sqrfPartF;
    312303  CFFList * bufSqrfFactors= new CFFList [factors.length()];
    313   CFList evalSqrfPartF;
    314   CFList bufFactors;
     304  CFList evalSqrfPartF, bufFactors;
     305  CFArray evalPoint= CFArray (evaluation.length() - 1);
     306  CFListIterator iter= evaluation;
     307  for (int i= evaluation.length() - 2; i > -1; i--, iter++)
     308    evalPoint[i]= iter.getItem();
    315309  //TODO sqrfPartF einmal berechnen nicht stÀndig
    316310  int pass= testFactors (F, factors, sqrfPartF,
    317                          bufFactors, bufSqrfFactors, evalSqrfPartF);
     311                         bufFactors, bufSqrfFactors, evalSqrfPartF, evalPoint);
    318312
    319313  bool foundDifferent= false;
     
    334328    for (int i= 0; i < length; i++)
    335329    {
    336       CanonicalForm bufF;
    337       CFListIterator iter;
     330      CanonicalForm bufF, swap;
    338331      CFList bufBufFactors;
     332      CFArray buf;
    339333      if (!differentSecondVarLCs [i].isEmpty())
    340334      {
     
    358352        bufF= swapvar (bufF, x, z);
    359353        bufBufFactors= bufFactors;
     354        evalPoint= CFArray (evaluation.length() - 1);
     355        buf= CFArray (evaluation.length());
     356        iter= evaluation;
     357        int k= evaluation.length() - 1;
     358        for (; iter.hasItem(); iter++, k--)
     359          buf[k]= iter.getItem();
     360        swap= buf[z.level() - 1];
     361        buf[z.level() - 1]= buf[0];
     362        buf[0]= 0;
     363        int l= 0;
     364        for (k= 0; k < evaluation.length(); k++)
     365        {
     366          if (buf[k].isZero())
     367            continue;
     368          evalPoint[l]= buf[k];
     369          l++;
     370        }
    360371        pass= testFactors (bufF, bufBufFactors, sqrfPartF, bufFactors,
    361                            bufSqrfFactors, evalSqrfPartF);
     372                           bufSqrfFactors, evalSqrfPartF, evalPoint);
    362373        if (pass)
    363374        {
     
    399410
    400411  bufFactors= factors;
    401 
     412  CFList evaluation2;
     413  if (y == x)
     414    evaluation2= evaluation;
     415  else
     416  {
     417    CanonicalForm tmp;
     418    evaluation2= evaluation;
     419    int i= evaluation.length() + 1;
     420    for (CFListIterator iter= evaluation2; iter.hasItem(); iter++, i--)
     421    {
     422      if (i == y.level())
     423      {
     424        tmp= iter.getItem();
     425        iter.getItem()= evaluation2.getLast();
     426        evaluation2.removeLast();
     427        evaluation2.append (tmp);
     428        break;
     429      }
     430    }
     431  }
     432
     433  sqrfPartF= shift2Zero (sqrfPartF, evalSqrfPartF, evaluation2, 1);
    402434  if (factors.length() > 1)
    403435  {
     
    408440      leadingCoeffs[i]= LC1;
    409441    for (CFListIterator i= factors; i.hasItem(); i++)
     442    {
     443      i.getItem()= i.getItem() (x + evaluation2.getLast(), x);
    410444      i.getItem() *= LC1 (0,2)/Lc (i.getItem());
     445    }
    411446    factors.insert (1);
    412447
     
    455490    factors= evalSqrfPartF.getLast();
    456491
    457   CFList interMedResult= recoverFactors (evalSqrfPartF.getLast(), factors);
     492  for (CFListIterator iter= factors; iter.hasItem(); iter++)
     493    iter.getItem()= reverseShift (iter.getItem(), evaluation2, 1);
     494
     495  CFList interMedResult=
     496  recoverFactors (reverseShift(evalSqrfPartF.getLast(),evaluation2,1), factors);
    458497
    459498  CFList result;
     
    735774    biFactorsLCs.append (LC (i.getItem(), 1));
    736775
    737 
    738   //shifting to zero
    739   A= shift2Zero (A, Aeval, evaluation);
    740 
    741   CanonicalForm hh= Lc (Aeval.getFirst());
    742 
    743   for (CFListIterator i= Aeval; i.hasItem(); i++)
    744     i.getItem() /= hh;
    745 
    746   A /= hh;
    747 
    748776  Variable w;
    749777  CFList leadingCoeffs= precomputeLeadingCoeff (LC (A, 1), biFactorsLCs,
     
    777805      }
    778806    }
    779     Aeval= evaluateAtZero (A);
    780   }
    781 
    782   CFListIterator iter= biFactors;
    783   for (; iter.hasItem(); iter++)
    784     iter.getItem()= iter.getItem () (y + evaluation.getLast(), y);
    785 
     807  }
     808
     809  CFListIterator iter;
    786810  CanonicalForm oldA= A;
    787811  CFList oldBiFactors= biFactors;
     
    792816    Aeval= evaluateAtZero (A);
    793817    tmp= leadingCoeffs.getFirst();
    794     for (int i= A.level(); i > 2; i--)
    795       tmp= tmp (0, i);
     818    iter= evaluation;
     819    for (int i= A.level(); i > 2; i--, iter++)
     820      tmp= tmp (iter.getItem(), i);
    796821    if (!tmp.inCoeffDomain())
    797822    {
     
    802827      }
    803828    }
    804     hh= Lc (Aeval.getFirst());
    805     for (CFListIterator i= Aeval; i.hasItem(); i++)
    806       i.getItem() /= hh;
    807 
    808     A /= hh;
    809829  }
    810830
     
    813833  //prepare leading coefficients
    814834  CFList* leadingCoeffs2= new CFList [A.level() - 2];
    815   prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors);
     835  prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors,
     836                        evaluation);
     837
     838
     839  Aeval= evaluateAtEval (A, evaluation, 2);
     840
     841  CanonicalForm hh= Lc (Aeval.getFirst());
     842
     843  for (CFListIterator i= Aeval; i.hasItem(); i++)
     844    i.getItem() /= hh;
     845
     846  A /= hh;
     847
     848  //shifting to zero
     849  A= shift2Zero (A, Aeval, evaluation);
     850
     851  for (iter= biFactors; iter.hasItem(); iter++)
     852    iter.getItem()= iter.getItem () (y + evaluation.getLast(), y);
     853
     854  for (int i= 0; i < A.level() - 2; i++)
     855  {
     856    if (i != A.level() - 3)
     857      leadingCoeffs2[i]= CFList();
     858  }
     859  for (iter= leadingCoeffs2[A.level() - 3]; iter.hasItem(); iter++)
     860  {
     861    iter.getItem()= shift2Zero (iter.getItem(), list, evaluation);
     862    for (int i= A.level() - 4; i > -1; i--)
     863    {
     864      if (i + 1 == A.level() - 3)
     865        leadingCoeffs2[i].append (iter.getItem() (0, i + 4));
     866      else
     867        leadingCoeffs2[i].append (leadingCoeffs2[i+1].getLast() (0, i + 4));
     868    }
     869  }
    816870
    817871  CFArray Pi;
     
    831885  {
    832886    int check= factors.length();
    833     factors= recoverFactors (reverseShift (oldA, evaluation), factors,
    834                             evaluation);
     887    A= oldA;
     888    factors= recoverFactors (A, factors, evaluation);
    835889    if (check != factors.length())
    836890      noOneToOne= true;
     
    838892  if (noOneToOne)
    839893  {
    840     A= oldA;
    841     Aeval= evaluateAtZero (A);
     894    A= shift2Zero (oldA, Aeval, evaluation);
    842895    biFactors= oldBiFactors;
     896    for (iter= biFactors; iter.hasItem(); iter++)
     897      iter.getItem()= iter.getItem () (y + evaluation.getLast(), y);
    843898    CanonicalForm LCA= LC (Aeval.getFirst(), 1);
    844899    CanonicalForm yToLift= power (y, lift);
  • factory/facFqFactorize.cc

    r91788c0 reefc3a  
    12791279}
    12801280
     1281CFList evaluateAtEval (const CanonicalForm& F, const CFArray& eval)
     1282{
     1283  CFList result;
     1284  CanonicalForm buf= F;
     1285  result.insert (buf);
     1286  int k= eval.size();
     1287  for (int i= 1; i < k; i++)
     1288  {
     1289    buf= buf (eval[i], i + 2);
     1290    result.insert (buf);
     1291  }
     1292  return result;
     1293}
     1294
     1295CFList evaluateAtEval (const CanonicalForm& F, const CFList& evaluation, int l)
     1296{
     1297  CFList result;
     1298  CanonicalForm buf= F;
     1299  result.insert (buf);
     1300  int k= evaluation.length() + l - 1;
     1301  CFListIterator j= evaluation;
     1302  for (int i= k; j.hasItem() && i > l; i--, j++)
     1303  {
     1304    if (F.level() < i)
     1305      continue;
     1306    buf= buf (j.getItem(), i);
     1307    result.insert (buf);
     1308  }
     1309  return result;
     1310}
     1311
    12811312int
    12821313testFactors (const CanonicalForm& G, const CFList& uniFactors,
    12831314             const Variable& alpha, CanonicalForm& sqrfPartF, CFList& factors,
    1284              CFFList*& bufSqrfFactors, CFList& evalSqrfPartF)
     1315             CFFList*& bufSqrfFactors, CFList& evalSqrfPartF,
     1316             const CFArray& evalPoint)
    12851317{
    12861318  CanonicalForm tmp;
     
    13071339    sqrfPartF *= i.getItem().factor();
    13081340
    1309   evalSqrfPartF= evaluateAtZero (sqrfPartF);
    1310 
    1311   CanonicalForm test= evalSqrfPartF.getFirst() (0, 2);
     1341  evalSqrfPartF= evaluateAtEval (sqrfPartF, evalPoint);
     1342
     1343  CanonicalForm test= evalSqrfPartF.getFirst() (evalPoint[0], 2);
    13121344
    13131345  if (degree (test) != degree (sqrfPartF, 1))
     
    13721404
    13731405  test= prod (factors);
    1374   tmp= evalSqrfPartF.getFirst() (0,2);
     1406  tmp= evalSqrfPartF.getFirst() (evalPoint[0],2);
    13751407  if (test/Lc (test) != tmp/Lc (tmp))
    13761408    return 0;
     
    13821414precomputeLeadingCoeff (const CanonicalForm& LCF, const CFList& LCFFactors,
    13831415                        const Variable& alpha, const CFList& evaluation,
    1384                         CFList* & differentSecondVarLCs, int length,
     1416                        CFList* & differentSecondVarLCs, int lSecondVarLCs,
    13851417                        Variable& y
    13861418                       )
     
    14061438    //bivariate leading coefficients are already the true leading coefficients
    14071439      result= LCFFactors;
    1408       Variable v= Variable (LCF.mvar());
    1409       CanonicalForm bla= 1;
    1410       for (CFListIterator i= result; i.hasItem(); i++)
    1411       {
    1412         i.getItem()= i.getItem() (v+evaluation.getLast(), v);
    1413         bla *= Lc (i.getItem());
    1414       }
    14151440      found= true;
    14161441    }
     
    14181443    {
    14191444      CFListIterator j;
    1420       for (int i= 0; i < length; i++)
     1445      for (int i= 0; i < lSecondVarLCs; i++)
    14211446      {
    14221447        for (j= differentSecondVarLCs[i]; j.hasItem(); j++)
     
    14481473  CFMap dummy;
    14491474  for (CFListIterator i= factors; i.hasItem(); i++)
    1450   {
    14511475    i.getItem()= compress (i.getItem(), dummy);
    1452     i.getItem()= i.getItem() (Variable (1) + evaluation.getLast(), Variable (1));
    1453   }
    14541476
    14551477  CanonicalForm sqrfPartF;
    14561478  CFFList * bufSqrfFactors= new CFFList [factors.length()];
    1457   CFList evalSqrfPartF;
    1458   CFList bufFactors;
     1479  CFList evalSqrfPartF, bufFactors;
     1480  CFArray evalPoint= CFArray (evaluation.length() - 1);
     1481  CFListIterator iter= evaluation;
     1482  for (int i= evaluation.length() - 2; i > -1; i--, iter++)
     1483    evalPoint[i]= iter.getItem();
     1484
    14591485  int pass= testFactors (F, factors, alpha, sqrfPartF,
    1460                          bufFactors, bufSqrfFactors, evalSqrfPartF);
     1486                         bufFactors, bufSqrfFactors, evalSqrfPartF, evalPoint);
    14611487
    14621488  bool foundDifferent= false;
    1463   Variable z;
    1464   Variable x= y;
     1489  Variable z, x= y;
    14651490  int j= 0;
    14661491  if (!pass)
     
    14761501      }
    14771502    }
    1478     CFListIterator iter;
    14791503    CFList bufBufFactors;
    1480     CanonicalForm bufF;
    1481     for (int i= 0; i < length; i++)
     1504    CanonicalForm bufF, swap;
     1505    CFArray buf;
     1506    for (int i= 0; i < lSecondVarLCs; i++)
    14821507    {
    14831508      if (!differentSecondVarLCs [i].isEmpty())
     
    15021527        bufF= swapvar (bufF, x, z);
    15031528        bufBufFactors= bufFactors;
     1529        evalPoint= CFArray (evaluation.length() - 1);
     1530        buf= CFArray (evaluation.length());
     1531        iter= evaluation;
     1532        int k= evaluation.length() - 1;
     1533        for (; iter.hasItem(); iter++, k--)
     1534          buf[k]= iter.getItem();
     1535        swap= buf[z.level() - 1];
     1536        buf[z.level() - 1]= buf[0];
     1537        buf[0]= 0;
     1538        int l= 0;
     1539        for (k= 0; k < evaluation.length(); k++)
     1540        {
     1541          if (buf[k].isZero())
     1542            continue;
     1543          evalPoint[l]= buf[k];
     1544          l++;
     1545        }
    15041546        pass= testFactors (bufF, bufBufFactors, alpha, sqrfPartF, bufFactors,
    1505                            bufSqrfFactors, evalSqrfPartF);
     1547                           bufSqrfFactors, evalSqrfPartF, evalPoint);
    15061548        if (pass)
    15071549        {
     
    15151557          break;
    15161558        }
    1517         if (!pass && i == length - 1)
     1559        if (!pass && i == lSecondVarLCs - 1)
    15181560        {
    15191561          CFList result;
     
    15421584
    15431585  bufFactors= factors;
    1544 
     1586  CFList evaluation2;
     1587  if (y == x)
     1588    evaluation2= evaluation;
     1589  else
     1590  {
     1591    CanonicalForm tmp;
     1592    evaluation2= evaluation;
     1593    int i= evaluation.length() + 1;
     1594    for (CFListIterator iter= evaluation2; iter.hasItem(); iter++, i--)
     1595    {
     1596      if (i == y.level())
     1597      {
     1598        tmp= iter.getItem();
     1599        iter.getItem()= evaluation2.getLast();
     1600        evaluation2.removeLast();
     1601        evaluation2.append (tmp);
     1602        break;
     1603      }
     1604    }
     1605  }
     1606
     1607  sqrfPartF= shift2Zero (sqrfPartF, evalSqrfPartF, evaluation2, 1);
    15451608  if (factors.length() > 1)
    15461609  {
     
    15501613    for (int i= 0; i < factors.length(); i++)
    15511614      leadingCoeffs[i]= LC1;
     1615
    15521616    for (CFListIterator i= factors; i.hasItem(); i++)
     1617    {
     1618      i.getItem()= i.getItem() (x + evaluation2.getLast(), x);
    15531619      i.getItem() *= LC1 (0,2)/Lc (i.getItem());
     1620    }
    15541621    factors.insert (1);
    15551622
     
    15981665    factors= evalSqrfPartF.getLast();
    15991666
    1600   CFList interMedResult= recoverFactors (evalSqrfPartF.getLast(), factors);
     1667  for (CFListIterator iter= factors; iter.hasItem(); iter++)
     1668    iter.getItem()= reverseShift (iter.getItem(), evaluation2, 1);
     1669
     1670  CFList interMedResult=
     1671  recoverFactors (reverseShift(evalSqrfPartF.getLast(),evaluation2,1), factors);
    16011672
    16021673  CFList result;
     
    16331704  result.insert (N (F));
    16341705
    1635   result= distributeContent (result, differentSecondVarLCs, length);
     1706  result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs);
    16361707
    16371708  if (!result.getFirst().inCoeffDomain())
     
    18211892  CFListIterator iter, iter2;
    18221893  Variable v;
    1823   CFList l, LCs;
    1824   CanonicalForm buf;
     1894  CFList l, LCs, buf;
     1895  int pos;
    18251896  for (int j= 0; j < A.level() - 2; j++)
    18261897  {
     
    18441915
    18451916      l= CFList();
     1917      buf= buildUniFactors (Aeval[j], evalPoint, v);
    18461918      for (iter= uniFactors; iter.hasItem(); iter++)
    18471919      {
    1848         for (iter2= Aeval[j]; iter2.hasItem(); iter2++)
    1849         {
    1850           buf= mod (iter2.getItem(), v - evalPoint);
    1851           buf /= Lc (buf);
    1852           if (iter.getItem() == buf)
    1853           {
    1854             l.append (iter2.getItem());
    1855             break;
    1856           }
    1857         }
     1920        pos= findItem (buf, iter.getItem());
     1921        if (pos)
     1922          l.append (getItem (Aeval[j], pos));
    18581923      }
    18591924      Aeval [j]= l;
     
    18611926      LCs= CFList();
    18621927      for (iter= Aeval[j]; iter.hasItem(); iter++)
    1863         LCs.append (LC (iter.getItem() (v + evalPoint, v), 1));
     1928        LCs.append (LC (iter.getItem(), 1));
    18641929      normalize (LCs);
    18651930      Aeval[j]= LCs;
     
    19201985
    19211986void prepareLeadingCoeffs (CFList*& LCs, int n, const CFList& leadingCoeffs,
    1922                            const CFList& biFactors)
     1987                           const CFList& biFactors, const CFList& evaluation)
    19231988{
    19241989  CFList l= leadingCoeffs;
    19251990  LCs [n-3]= l;
    19261991  CFListIterator j;
    1927   for (int i= n - 1; i > 2; i--)
     1992  CFListIterator iter= evaluation;
     1993  for (int i= n - 1; i > 2; i--, iter++)
    19281994  {
    19291995    for (j= l; j.hasItem(); j++)
    1930       j.getItem()= j.getItem() (0, i + 1);
     1996      j.getItem()= j.getItem() (iter.getItem(), i + 1);
    19311997    LCs [i - 3]= l;
    19321998  }
    19331999  l= LCs [0];
    19342000  for (CFListIterator i= l; i.hasItem(); i++)
    1935     i.getItem()= i.getItem() (0, 3);
     2001    i.getItem()= i.getItem() (iter.getItem(), 3);
    19362002  CFListIterator ii= biFactors;
    19372003  CFList normalizeFactor;
     
    24372503    biFactorsLCs.append (LC (i.getItem(), 1));
    24382504
    2439 
    2440   //shifting to zero
    2441   A= shift2Zero (A, Aeval, evaluation);
    2442 
    2443   CanonicalForm hh= Lc (Aeval.getFirst());
    2444 
    2445   for (CFListIterator i= Aeval; i.hasItem(); i++)
    2446     i.getItem() /= hh;
    2447 
    2448   A /= hh;
    2449 
    24502505  Variable v;
    24512506  CFList leadingCoeffs= precomputeLeadingCoeff (LC (A, 1), biFactorsLCs, alpha,
     
    24792534      }
    24802535    }
    2481     Aeval= evaluateAtZero (A);
    2482   }
    2483 
    2484   CFListIterator iter= biFactors;
    2485   for (; iter.hasItem(); iter++)
    2486     iter.getItem()= iter.getItem () (y + evaluation.getLast(), y);
    2487 
     2536  }
     2537
     2538  CFListIterator iter;
    24882539  CanonicalForm oldA= A;
    24892540  CFList oldBiFactors= biFactors;
     
    24922543    CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);
    24932544    A *= tmp;
    2494     Aeval= evaluateAtZero (A);
    24952545    tmp= leadingCoeffs.getFirst();
    2496     for (int i= A.level(); i > 2; i--)
    2497       tmp= tmp (0, i);
     2546    iter= evaluation;
     2547    for (int i= A.level(); i > 2; i--, iter++)
     2548      tmp= tmp (iter.getItem(), i);
    24982549    if (!tmp.inCoeffDomain())
    24992550    {
     
    25042555      }
    25052556    }
    2506     hh= Lc (Aeval.getFirst());
    2507     for (CFListIterator i= Aeval; i.hasItem(); i++)
    2508       i.getItem() /= hh;
    2509 
    2510     A /= hh;
    25112557  }
    25122558
     
    25152561  //prepare leading coefficients
    25162562  CFList* leadingCoeffs2= new CFList [A.level() - 2];
    2517   prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors);
     2563  prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors,
     2564                        evaluation);
     2565
     2566  Aeval= evaluateAtEval (A, evaluation, 2);
     2567  CanonicalForm hh= Lc (Aeval.getFirst());
     2568  for (iter= Aeval; iter.hasItem(); iter++)
     2569    iter.getItem() /= hh;
     2570
     2571  A /= hh;
     2572
     2573  A= shift2Zero (A, Aeval, evaluation);
     2574
     2575  for (iter= biFactors; iter.hasItem(); iter++)
     2576    iter.getItem()= iter.getItem () (y + evaluation.getLast(), y);
     2577
     2578  for (int i= 0; i < A.level() - 2; i++)
     2579  {
     2580    if (i != A.level() - 3)
     2581      leadingCoeffs2[i]= CFList();
     2582  }
     2583  for (iter= leadingCoeffs2[A.level() - 3]; iter.hasItem(); iter++)
     2584  {
     2585    iter.getItem()= shift2Zero (iter.getItem(), list, evaluation);
     2586    for (int i= A.level() - 4; i > -1; i--)
     2587    {
     2588      if (i + 1 == A.level() - 3)
     2589        leadingCoeffs2[i].append (iter.getItem() (0, i + 4));
     2590      else
     2591        leadingCoeffs2[i].append (leadingCoeffs2[i+1].getLast() (0, i + 4));
     2592    }
     2593  }
    25182594
    25192595  CFArray Pi;
     
    25292605                               Pi, liftBounds, liftBoundsLength, noOneToOne);
    25302606
    2531 
    25322607  if (!noOneToOne)
    25332608  {
    25342609    int check= factors.length();
    2535     A= reverseShift (oldA, evaluation);
     2610    A= oldA;
    25362611    factors= recoverFactors (A, factors, evaluation);
    25372612    if (check != factors.length())
     
    25432618  if (noOneToOne)
    25442619  {
    2545     A= oldA;
    2546     Aeval= evaluateAtZero (A);
     2620    A= shift2Zero (oldA, Aeval, evaluation);
    25472621    biFactors= oldBiFactors;
     2622    for (iter= biFactors; iter.hasItem(); iter++)
     2623      iter.getItem()= iter.getItem () (y + evaluation.getLast(), y);
    25482624    CanonicalForm LCA= LC (Aeval.getFirst(), 1);
    25492625    CanonicalForm yToLift= power (y, lift);
     
    26102686    }
    26112687  }
    2612 
    2613 
    26142688
    26152689  if (v.level() != 1)
  • factory/facFqFactorize.h

    r91788c0 reefc3a  
    518518
    519519/// normalize precomputed leading coefficients such that leading coefficients
    520 /// evaluated at 0 in K^(n-2) equal the leading coeffs wrt Variable(1) of
    521 /// bivariate factors
     520/// evaluated at @a evaluation in K^(n-2) equal the leading coeffs wrt
     521/// Variable(1) of bivariate factors
    522522void
    523523prepareLeadingCoeffs (CFList*& LCs,               ///<[in,out]
     
    526526                      const CFList& leadingCoeffs,///<[in] precomputed leading
    527527                                                  ///< coeffs
    528                       const CFList& biFactors     ///<[in] bivariate factors
     528                      const CFList& biFactors,    ///<[in] bivariate factors
     529                      const CFList& evaluation    ///<[in] evaluation point
    529530                     );
    530531
     
    583584                );
    584585
     586/// evaluate @a F at @a evaluation
     587///
     588/// @return @a evaluateAtEval returns a list containing the successive
     589/// evaluations of @a F, last entry is @a F again
     590CFList
     591evaluateAtEval (const CanonicalForm& F,   ///<[in] some poly
     592                const CFArray& evaluation ///<[in] some evaluation point
     593               );
     594
     595/// evaluate @a F at @a evaluation
     596///
     597/// @return @a evaluateAtEval returns a list containing the successive
     598/// evaluations of @a F starting at level @a l, last entry is @a F again
     599CFList
     600evaluateAtEval (const CanonicalForm& F,  ///<[in] some poly
     601                const CFList& evaluation,///<[in] some evaluation point
     602                int l                    ///<[in] level to start at
     603               );
     604
    585605#endif
    586606/* FAC_FQ_FACTORIZE_H */
Note: See TracChangeset for help on using the changeset viewer.