Changeset ee0b48 in git


Ignore:
Timestamp:
Jan 6, 2011, 1:31:39 PM (12 years ago)
Author:
Frank Seelisch <seelisch@…>
Branches:
(u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
Children:
22303d6e0646191c1eee37f0a1b95cd9bd9364d1
Parents:
b90cc8b474180d8d55d1ffc520a7e8ae0a273c30
Message:
switched division of numbers back to div of polys

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

Legend:

Unmodified
Added
Removed
  • kernel/linearAlgebra.cc

    rb90cc8 ree0b48  
    439439        MATELEM(N, nonZeroC, dim) = pCopy(MATELEM(uMat, r, w));
    440440      }
    441       number z;
    442441      for (int d = 1; d <= dim; d++)
    443442      {
     
    450449          if (MATELEM(N, c, d) != NULL)
    451450            p = pAdd(p, ppMult_qq(MATELEM(uMat, r, c), MATELEM(N, c, d)));
    452         MATELEM(N, nonZeroC, d) = pNeg(p);
    453         if (MATELEM(N, nonZeroC, d) != NULL)
    454         {
    455           z = nDiv(pGetCoeff(MATELEM(N, nonZeroC, d)),
    456                    pGetCoeff(MATELEM(uMat, r, nonZeroC)));
    457           nNormalize(z); pDelete(&MATELEM(N, nonZeroC, d));
    458           MATELEM(N, nonZeroC, d) = pNSet(z);
    459         }
     451        q = pNSet(nInvers(pGetCoeff(MATELEM(uMat, r, nonZeroC))));
     452        MATELEM(N, nonZeroC, d) = pMult(pNeg(p), q);
     453        pNormalize(MATELEM(N, nonZeroC, d));
    460454      }
    461455      p = pNeg(pCopy(MATELEM(yVec, r, 1)));
     
    463457        if (MATELEM(xVec, c, 1) != NULL)
    464458          p = pAdd(p, ppMult_qq(MATELEM(uMat, r, c), MATELEM(xVec, c, 1)));
    465       MATELEM(xVec, nonZeroC, 1) = pNeg(p);
    466       if (MATELEM(xVec, nonZeroC, 1) != NULL)
    467       {
    468         z = nDiv(pGetCoeff(MATELEM(xVec, nonZeroC, 1)),
    469                  pGetCoeff(MATELEM(uMat, r, nonZeroC)));
    470         nNormalize(z); pDelete(&MATELEM(xVec, nonZeroC, 1));
    471         MATELEM(xVec, nonZeroC, 1) = pNSet(z);       
    472       }
     459      q = pNSet(nInvers(pGetCoeff(MATELEM(uMat, r, nonZeroC))));
     460      MATELEM(xVec, nonZeroC, 1) = pMult(pNeg(p), q);
     461      pNormalize(MATELEM(xVec, nonZeroC, 1));
    473462      lastNonZeroC = nonZeroC;
    474463    }
     
    15371526  /* solve lMat * yVec = cVec; this will always work as lMat is invertible;
    15381527     moreover, all divisions are guaranteed to be without remainder */
    1539   number z;
     1528  poly p; poly q;
    15401529  for (int r = 1; r <= m; r++)
    15411530  {
    1542     poly p = pNeg(pCopy(MATELEM(cVec, r, 1)));
     1531    p = pNeg(pCopy(MATELEM(cVec, r, 1)));
    15431532    for (int c = 1; c < r; c++)
    15441533      p = pAdd(p, ppMult_qq(MATELEM(lMat, r, c), MATELEM(yVec, c, 1) ));
    1545     MATELEM(yVec, r, 1) = pNeg(p);
    1546     if (MATELEM(yVec, r, 1) != NULL)
    1547     {
    1548       z = nDiv(pGetCoeff(MATELEM(yVec, r, 1)), pGetCoeff(MATELEM(lMat, r, r)));
    1549       nNormalize(z);   /* division is without remainder */
    1550       pDelete(&MATELEM(yVec, r, 1));
    1551       MATELEM(yVec, r, 1) = pNSet(z);
    1552     }
     1534    /* The following division is without remainder. */
     1535    q = pNSet(nInvers(pGetCoeff(MATELEM(lMat, r, r))));
     1536    MATELEM(yVec, r, 1) = pMult(pNeg(p), q);
     1537    pNormalize(MATELEM(yVec, r, 1));   
    15531538  }
    15541539 
    15551540  /* compute u * dMat * yVec and put result into yVec */
    1556   poly p;
    15571541  for (int r = 1; r <= m; r++)
    15581542  {
     
    15801564    xVec = mpNew(n, 1);
    15811565    matrix N = mpNew(n, n); int dim = 0;
    1582     poly p; poly q;
    15831566    /* solve uMat * xVec = yVec and determine a basis of the solution
    15841567       space of the homogeneous system uMat * xVec = 0;
     
    16101593          if (MATELEM(N, c, d) != NULL)
    16111594            p = pAdd(p, ppMult_qq(MATELEM(uMat, r, c), MATELEM(N, c, d)));
    1612         MATELEM(N, nonZeroC, d) = pNeg(p);
    1613         if (MATELEM(N, nonZeroC, d) != NULL)
    1614         {
    1615           z = nDiv(pGetCoeff(MATELEM(N, nonZeroC, d)),
    1616                    pGetCoeff(MATELEM(uMat, r, nonZeroC)));
    1617           nNormalize(z);   /* division may be with remainder but only takes
    1618                               place for dim > 0 */
    1619           pDelete(&MATELEM(N, nonZeroC, d));
    1620           MATELEM(N, nonZeroC, d) = pNSet(z);
    1621         }
     1595        /* The following division may be with remainder but only takes place
     1596           when dim > 0. */
     1597        q = pNSet(nInvers(pGetCoeff(MATELEM(uMat, r, nonZeroC))));
     1598        MATELEM(N, nonZeroC, d) = pMult(pNeg(p), q);
     1599        pNormalize(MATELEM(N, nonZeroC, d));
    16221600      }
    16231601      p = pNeg(pCopy(MATELEM(yVec, r, 1)));
     
    16251603        if (MATELEM(xVec, c, 1) != NULL)
    16261604          p = pAdd(p, ppMult_qq(MATELEM(uMat, r, c), MATELEM(xVec, c, 1)));
    1627       MATELEM(xVec, nonZeroC, 1) = pNeg(p);
    1628       if (MATELEM(xVec, nonZeroC, 1) != NULL)
    1629       {
    1630         z = nDiv(pGetCoeff(MATELEM(xVec, nonZeroC, 1)),
    1631                  pGetCoeff(MATELEM(uMat, r, nonZeroC)));
    1632         nNormalize(z);   /* division is without remainder */
    1633         pDelete(&MATELEM(xVec, nonZeroC, 1));
    1634         MATELEM(xVec, nonZeroC, 1) = pNSet(z);
    1635       }
     1605      /* The following division is without remainder. */
     1606      q = pNSet(nInvers(pGetCoeff(MATELEM(uMat, r, nonZeroC))));
     1607      MATELEM(xVec, nonZeroC, 1) = pMult(pNeg(p), q);
     1608      pNormalize(MATELEM(xVec, nonZeroC, 1));
    16361609      lastNonZeroC = nonZeroC;
    16371610    }
    16381611   
    16391612    /* divide xVec by l*u = lTimesU and put result in xVec */
    1640     number zz = pGetCoeff(lTimesU);
     1613    number z = nInvers(pGetCoeff(lTimesU));
    16411614    for (int c = 1; c <= n; c++)
    16421615    {
    1643       if (MATELEM(xVec, c, 1) != NULL)
    1644       {
    1645         z = nDiv(pGetCoeff(MATELEM(xVec, c, 1)), zz);
    1646         nNormalize(z);
    1647         pDelete(&MATELEM(xVec, c, 1));
    1648         MATELEM(xVec, c, 1) = pNSet(z);
    1649       }
    1650     }
     1616      pMult_nn(MATELEM(xVec, c, 1), z);
     1617      pNormalize(MATELEM(xVec, c, 1));
     1618    }
     1619    nDelete(&z);
    16511620   
    16521621    if (dim == 0)
Note: See TracChangeset for help on using the changeset viewer.