Changeset be1e92 in git


Ignore:
Timestamp:
Dec 2, 2010, 4:08:00 PM (13 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
Children:
4e75784f0d5e941b4a716274f7236f53348703e1
Parents:
34ab5f65915ea1dfa21855f73940082f660d5855
Message:
code cleanup: smElim

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

Legend:

Unmodified
Added
Removed
  • kernel/sparsmat.cc

    r34ab5f6 rbe1e92  
    840840/* ----------------- elimination ------------------ */
    841841
    842 /* steps of elimination */
    843 void sparse_mat::smElim()
    844 {
    845   poly p = piv->m;        // pivotelement
    846   smpoly c = m_act[act];  // pivotcolumn
    847   smpoly r = red;         // row to reduce
    848   poly q;
    849   smpoly res, a, b;
    850   poly w, ha, hb;
    851   int i;
    852 
    853   if (oldpiv != NULL) q = oldpiv->m; // previous pivot
    854   else q = NULL;
    855   if ((c == NULL) || (r == NULL))
    856   {
    857     while (r) smElemDelete(&r);
    858     for (i=1; i<act; i++)
    859     {
    860       a = m_act[i];
    861       while (a != NULL)
    862       {
    863         ha = SM_MULT(a->m, p, q);
    864         pDelete(&a->m);
    865         if (q) SM_DIV(ha, q);
    866         a->m = ha;
    867         a = a->n;
    868       }
    869     }
    870     return;
    871   }
    872   for (i=1; i<act; i++)
    873   {
    874     a = m_act[i];
    875     if ((r == NULL) || (i != r->pos))  // cols without elimination
    876     {
    877       while (a != NULL)
    878       {
    879         ha = SM_MULT(a->m, p, q);
    880         pDelete(&a->m);
    881         if (q) SM_DIV(ha, q);
    882         a->m = ha;
    883         a = a->n;
    884       }
    885     }
    886     else                    // cols with elimination
    887     {
    888       res = dumm;
    889       res->n = NULL;
    890       b = c;
    891       w = r->m;
    892       loop                  // combine the chains a and b: p*a + w*b
    893       {
    894         if (a == NULL)
    895         {
    896           if (b != NULL)
    897           {
    898             do
    899             {
    900               res = res->n = smElemCopy(b);
    901               hb = SM_MULT(b->m, w, q);
    902               if (q) SM_DIV(hb, q);
    903               res->m = hb;
    904               b = b->n;
    905             } while (b != NULL);
    906           }
    907           else
    908             res->n = NULL;
    909           break;
    910         }
    911         if (b == NULL)
    912         {
    913           do
    914           {
    915             ha = SM_MULT(a->m, p, q);
    916             pDelete(&a->m);
    917             if (q) SM_DIV(ha, q);
    918             a->m = ha;
    919             res = res->n = a;
    920             a = a->n;
    921           } while (a != NULL);
    922           break;
    923         }
    924         if (a->pos < b->pos)
    925         {
    926           ha = SM_MULT(a->m, p, q);
    927           pDelete(&a->m);
    928           if (q) SM_DIV(ha, q);
    929           a->m = ha;
    930           res = res->n = a;
    931           a = a->n;
    932         }
    933         else if (a->pos > b->pos)
    934         {
    935           res = res->n = smElemCopy(b);
    936           hb = SM_MULT(b->m, w, q);
    937           b = b->n;
    938           if (q) SM_DIV(hb, q);
    939           res->m = hb;
    940         }
    941         else
    942         {
    943           ha = SM_MULT(a->m, p, q);
    944           pDelete(&a->m);
    945           hb = SM_MULT(b->m, w, q);
    946           ha = pAdd(ha, hb);
    947           if (ha != NULL)
    948           {
    949             if (q) SM_DIV(ha, q);
    950             a->m = ha;
    951             res = res->n = a;
    952             a = a->n;
    953           }
    954           else
    955           {
    956             smElemDelete(&a);
    957           }
    958           b = b->n;
    959         }
    960       }
    961       m_act[i] = dumm->n;
    962       if (r) smElemDelete(&r);
    963     }
    964   }
    965 }
    966 
    967842/* first step of elimination */
    968843void sparse_mat::sm1Elim()
Note: See TracChangeset for help on using the changeset viewer.