Changeset 2f2562 in git


Ignore:
Timestamp:
Dec 2, 2010, 1:21:09 PM (13 years ago)
Author:
Frank Seelisch <seelisch@…>
Branches:
(u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
Children:
c45b2a570e15e5718d43d21d9192d8960f315c25
Parents:
47b559d8a480780a6380da801528adb53dca1000
Message:
improvement in hensel factorization

git-svn-id: file:///usr/local/Singular/svn/trunk@13688 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/linearAlgebra.cc

    r47b559d r2f2562  
    13251325    matrix bVec = mpNew(n + m, 1);     /* b */
    13261326   
    1327     /* setup A */
    1328     for (int row = 1; row <= n + m; row++)
    1329     {
    1330       int k = row;
    1331       for (int col = 1; col <= n; col++)
    1332       {
    1333         if (k <= m + 1) MATELEM(aMat, row, col) = pCopy(MATELEM(gMat, k, 1));
    1334         k--;
    1335         if (k == 0) break;
    1336       }
    1337       k = row;
    1338       for (int col = n + 1; col <= n + m; col++)
    1339       {
    1340         if (k <= n + 1) MATELEM(aMat, row, col) = pCopy(MATELEM(fMat, k, 1));
    1341         k--;
    1342         if (k == 0) break;
    1343       }
    1344     }
    1345 
    13461327    /* setup b */
     1328    bool isZeroVector = true;
    13471329    for (int row = 1; row <= n + m; row++)
    13481330    {
     
    13631345      }
    13641346      MATELEM(bVec, row, 1) = p;
     1347      if (p != NULL) isZeroVector = false;
     1348    }
     1349   
     1350    /* setup A (only if b is not the zero vector) */
     1351    if (!isZeroVector)
     1352    {
     1353      for (int row = 1; row <= n + m; row++)
     1354      {
     1355        int k = row;
     1356        for (int col = 1; col <= n; col++)
     1357        {
     1358          if (k <= m + 1) MATELEM(aMat, row, col) = pCopy(MATELEM(gMat, k, 1));
     1359          k--;
     1360          if (k == 0) break;
     1361        }
     1362        k = row;
     1363        for (int col = n + 1; col <= n + m; col++)
     1364        {
     1365          if (k <= n + 1) MATELEM(aMat, row, col) = pCopy(MATELEM(fMat, k, 1));
     1366          k--;
     1367          if (k == 0) break;
     1368        }
     1369      }
    13651370    }
    13661371
    13671372    /* computation of x */
    1368     matrix pMat; matrix lMat; matrix uMat; matrix wMat;
    1369     luDecomp(aMat, pMat, lMat, uMat);
    1370     luSolveViaLUDecomp(pMat, lMat, uMat, bVec, xVec, wMat);
     1373    if (!isZeroVector)
     1374    {
     1375      matrix pMat; matrix lMat; matrix uMat; matrix wMat;
     1376      luDecomp(aMat, pMat, lMat, uMat);
     1377      luSolveViaLUDecomp(pMat, lMat, uMat, bVec, xVec, wMat);
     1378      idDelete((ideal*)&pMat); idDelete((ideal*)&lMat);
     1379      idDelete((ideal*)&uMat); idDelete((ideal*)&wMat);
     1380    }
    13711381
    13721382    /* fill (xExp + 1)-columns of fMat and gMat */
     
    13781388    /* clean-up */
    13791389    idDelete((ideal*)&aMat); idDelete((ideal*)&xVec); idDelete((ideal*)&bVec);
    1380     idDelete((ideal*)&pMat); idDelete((ideal*)&lMat); idDelete((ideal*)&uMat);
    1381     idDelete((ideal*)&wMat);
    13821390  }
    13831391 
Note: See TracChangeset for help on using the changeset viewer.