Changeset f3ff22 in git


Ignore:
Timestamp:
Aug 20, 2012, 11:49:41 AM (10 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'ad2543eab51733612ba7d118afc77edca719600e')
Children:
27e0172370323ce80587df1d73a66392a08a5c03
Parents:
c1ea88e1b3b498027a5c23d1d0b8163e2bf2762b
git-author:
Martin Lee <martinlee84@web.de>2012-08-20 11:49:41+02:00
git-committer:
Martin Lee <martinlee84@web.de>2012-09-04 18:01:18+02:00
Message:
chg: more heuristics to distribute leading coefficient
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/facFactorize.cc

    rc1ea88 rf3ff22  
    11611161            for (iter= contents; iter.hasItem(); iter++, iter2++)
    11621162              iter2.getItem() /= iter.getItem();
     1163            foundMultiplier= true;
     1164          }
     1165          if (!foundMultiplier)
     1166          {
     1167            Variable xx;
     1168            CFList vars1;
     1169            CFFList sqrfMultiplier= sqrFree (LCmultiplier);
     1170            if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
     1171              sqrfMultiplier.removeFirst();
     1172            sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
     1173            xx= Variable (2);
     1174            for (iter= oldBiFactors; iter.hasItem(); iter++)
     1175              vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
     1176            for (int i= 0; i < A.level() -2; i++)
     1177            {
     1178              if (oldAeval[i].isEmpty())
     1179                continue;
     1180              xx= oldAeval[i].getFirst().mvar();
     1181              iter2= vars1;
     1182              for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
     1183                iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx));
     1184            }
     1185            CanonicalForm tmp;
     1186            iter2= vars1;
     1187            for (iter= leadingCoeffs2[A.level()-3]; iter.hasItem(); iter++,
     1188                                                                    iter2++)
     1189            {
     1190              tmp= iter.getItem()/LCmultiplier;
     1191              for (int i=1; i <= tmp.level(); i++)
     1192              {
     1193                if (degree (tmp, i) > 0)
     1194                  iter2.getItem() /= power (Variable (i), degree (tmp,i));
     1195              }
     1196            }
     1197            int multi;
     1198            for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
     1199            {
     1200              multi= 0;
     1201              for (iter= vars1; iter.hasItem(); iter++)
     1202              {
     1203                tmp= iter.getItem();
     1204                while (fdivides (myGetVars (ii.getItem().factor()), tmp))
     1205                {
     1206                  multi++;
     1207                  tmp /= myGetVars (ii.getItem().factor());
     1208                }
     1209              }
     1210              if (multi == ii.getItem().exp())
     1211              {
     1212                index= 1;
     1213                for (iter= vars1; iter.hasItem(); iter++, index++)
     1214                {
     1215                  while (fdivides (myGetVars(ii.getItem().factor()),
     1216                                   iter.getItem()
     1217                                  )
     1218                        )
     1219                  {
     1220                    int index2= 1;
     1221                    for (iter2= leadingCoeffs2[A.level()-3]; iter2.hasItem();
     1222                         iter2++, index2++)
     1223                    {
     1224                      if (index2 == index)
     1225                        continue;
     1226                      else
     1227                      {
     1228                        tmp= ii.getItem().factor();
     1229                        iter2.getItem() /= tmp;
     1230                        CFListIterator iter3= evaluation;
     1231                        for (int jj= A.level(); jj > 2; jj--, iter3++)
     1232                          tmp= tmp (iter3.getItem(), jj);
     1233                        if (!tmp.inCoeffDomain())
     1234                        {
     1235                          int index3= 1;
     1236                          for (iter3= biFactors; iter3.hasItem(); iter3++,
     1237                                                                  index3++)
     1238                          {
     1239                            if (index3 == index2)
     1240                            {
     1241                              iter3.getItem() /= tmp;
     1242                              iter3.getItem() /= Lc (iter3.getItem());
     1243                              break;
     1244                            }
     1245                          }
     1246                        }
     1247                        A /= ii.getItem().factor();
     1248                      }
     1249                    }
     1250                    iter.getItem() /= getVars (ii.getItem().factor());
     1251                  }
     1252                }
     1253              }
     1254              else
     1255              {
     1256                index= 1;
     1257                for (iter= vars1; iter.hasItem(); iter++, index++)
     1258                {
     1259                  if (!fdivides (myGetVars (ii.getItem().factor()),
     1260                                 iter.getItem()
     1261                                )
     1262                     )
     1263                  {
     1264                    int index2= 1;
     1265                    for (iter2= leadingCoeffs2[A.level()-3]; iter2.hasItem();
     1266                         iter2++, index2++)
     1267                    {
     1268                      if (index2 == index)
     1269                      {
     1270                        tmp= power (ii.getItem().factor(), ii.getItem().exp());
     1271                        iter2.getItem() /= tmp;
     1272                        A /= tmp;
     1273                        CFListIterator iter3= evaluation;
     1274                        for (int jj= A.level(); jj > 2; jj--, iter3++)
     1275                          tmp= tmp (iter3.getItem(), jj);
     1276                        if (!tmp.inCoeffDomain())
     1277                        {
     1278                          int index3= 1;
     1279                          for (iter3= biFactors; iter3.hasItem(); iter3++,
     1280                                                                  index3++)
     1281                          {
     1282                            if (index3 == index2)
     1283                            {
     1284                              iter3.getItem() /= tmp;
     1285                              iter3.getItem() /= Lc (iter3.getItem());
     1286                              break;
     1287                            }
     1288                          }
     1289                        }
     1290                      }
     1291                    }
     1292                  }
     1293                }
     1294              }
     1295            }
    11631296          }
    11641297        }
     
    11921325      factors= CFList();
    11931326    delete [] index;
     1327  }
     1328  if (!LCheuristic && !LCmultiplierIsConst && bufFactors.isEmpty())
     1329  {
     1330    int index;
     1331    Variable xx;
     1332    CFList vars1;
     1333    CFFList sqrfMultiplier= sqrFree (LCmultiplier);
     1334    if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
     1335      sqrfMultiplier.removeFirst();
     1336    sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
     1337    xx= Variable (2);
     1338    for (iter= oldBiFactors; iter.hasItem(); iter++)
     1339      vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
     1340    for (int i= 0; i < A.level() -2; i++)
     1341    {
     1342      if (oldAeval[i].isEmpty())
     1343        continue;
     1344      xx= oldAeval[i].getFirst().mvar();
     1345      iter2= vars1;
     1346      for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
     1347        iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx));
     1348    }
     1349    CanonicalForm tmp;
     1350    iter2= vars1;
     1351    for (iter= leadingCoeffs2[A.level()-3]; iter.hasItem(); iter++, iter2++)
     1352    {
     1353      tmp= iter.getItem()/LCmultiplier;
     1354      for (int i=1; i <= tmp.level(); i++)
     1355      {
     1356        if (degree (tmp, i) > 0)
     1357          iter2.getItem() /= power (Variable (i), degree (tmp,i));
     1358      }
     1359    }
     1360    int multi;
     1361    for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
     1362    {
     1363      multi= 0;
     1364      for (iter= vars1; iter.hasItem(); iter++)
     1365      {
     1366        tmp= iter.getItem();
     1367        while (fdivides (myGetVars (ii.getItem().factor()), tmp))
     1368        {
     1369          multi++;
     1370          tmp /= myGetVars (ii.getItem().factor());
     1371        }
     1372      }
     1373      if (multi == ii.getItem().exp())
     1374      {
     1375        index= 1;
     1376        for (iter= vars1; iter.hasItem(); iter++, index++)
     1377        {
     1378          while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
     1379          {
     1380            int index2= 1;
     1381            for (iter2= leadingCoeffs2[A.level()-3]; iter2.hasItem(); iter2++,
     1382                                                                      index2++)
     1383            {
     1384              if (index2 == index)
     1385                continue;
     1386              else
     1387              {
     1388                tmp= ii.getItem().factor();
     1389                iter2.getItem() /= tmp;
     1390                CFListIterator iter3= evaluation;
     1391                for (int jj= A.level(); jj > 2; jj--, iter3++)
     1392                  tmp= tmp (iter3.getItem(), jj);
     1393                if (!tmp.inCoeffDomain())
     1394                {
     1395                  int index3= 1;
     1396                  for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
     1397                  {
     1398                    if (index3 == index2)
     1399                    {
     1400                      iter3.getItem() /= tmp;
     1401                      iter3.getItem() /= Lc (iter3.getItem());
     1402                      break;
     1403                    }
     1404                  }
     1405                }
     1406                A /= ii.getItem().factor();
     1407              }
     1408            }
     1409            iter.getItem() /= getVars (ii.getItem().factor());
     1410          }
     1411        }
     1412      }
     1413      else
     1414      {
     1415        index= 1;
     1416        for (iter= vars1; iter.hasItem(); iter++, index++)
     1417        {
     1418          if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
     1419          {
     1420            int index2= 1;
     1421            for (iter2= leadingCoeffs2[A.level()-3]; iter2.hasItem(); iter2++,
     1422                                                                      index2++)
     1423            {
     1424              if (index2 == index)
     1425              {
     1426                tmp= power (ii.getItem().factor(), ii.getItem().exp());
     1427                iter2.getItem() /= tmp;
     1428                A /= tmp;
     1429                CFListIterator iter3= evaluation;
     1430                for (int jj= A.level(); jj > 2; jj--, iter3++)
     1431                  tmp= tmp (iter3.getItem(), jj);
     1432                if (!tmp.inCoeffDomain())
     1433                {
     1434                  int index3= 1;
     1435                  for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
     1436                  {
     1437                    if (index3 == index2)
     1438                    {
     1439                      iter3.getItem() /= tmp;
     1440                      iter3.getItem() /= Lc (iter3.getItem());
     1441                      break;
     1442                    }
     1443                  }
     1444                }
     1445              }
     1446            }
     1447          }
     1448        }
     1449      }
     1450    }
     1451
     1452    leadingCoeffs= leadingCoeffs2[A.level()-3];
     1453    for (int i= A.level()-3; i > -1; i--)
     1454      leadingCoeffs2[i]= CFList();
     1455    prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors,
     1456                          evaluation);
     1457    Aeval= evaluateAtEval (A, evaluation, 2);
     1458
     1459    hh= Lc (Aeval.getFirst());
     1460
     1461    for (CFListIterator i= Aeval; i.hasItem(); i++)
     1462      i.getItem() /= hh;
     1463
     1464    A /= hh;
    11941465  }
    11951466
Note: See TracChangeset for help on using the changeset viewer.