[BACK]Return to PU.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / engine

Diff for /OpenXM_contrib2/asir2000/engine/PU.c between version 1.10 and 1.14

version 1.10, 2004/06/25 03:07:51 version 1.14, 2010/01/31 03:25:54
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/engine/PU.c,v 1.9 2002/09/11 07:23:25 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/engine/PU.c,v 1.13 2010/01/28 08:56:26 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
   
Line 114  void substp(VL vl,P p,V v0,P p0,P *pr)
Line 114  void substp(VL vl,P p,V v0,P p0,P *pr)
         }          }
 }  }
   
   void substpp(VL vl,P p,V *vvect,P *svect,int nv,P *pr);
   
   void substpp(VL vl,P p,V *vvect,P *svect,int nv,P *pr)
   {
           P x,t,m,c,s,a,p0,c1;
           DCP dc;
           Q d;
           V v;
           int i;
   
           if ( !p )
                   *pr = 0;
           else if ( NUM(p) )
                   *pr = p;
           else {
                   v = VR(p);
                   for ( i = 0; i < nv; i++ ) if ( vvect[i] == v ) break;
                   if ( svect[i] && OID(svect[i]) < 0 ) {
                           MKV(VR(p),x);
                           for ( c = 0, dc = DC(p); dc; dc = NEXT(dc) ) {
                                   substpp(vl,COEF(dc),vvect,svect,nv,&t);
                                   if ( DEG(dc) ) {
                                           pwrp(vl,x,DEG(dc),&s); mulp(vl,s,t,&m);
                                           addp(vl,m,c,&a);
                                           c = a;
                                   } else {
                                           addp(vl,t,c,&a);
                                           c = a;
                                   }
                           }
                           *pr = c;
                   } else {
                           p0 = svect[i];
                           dc = DC(p);
                           substpp(vl,COEF(dc),vvect,svect,nv,&c);
                           for ( d = DEG(dc), dc = NEXT(dc);
                                   dc; d = DEG(dc), dc = NEXT(dc) ) {
                                           subq(d,DEG(dc),(Q *)&t); pwrp(vl,p0,(Q)t,&s);
                                           mulp(vl,s,c,&m);
                                           substpp(vl,COEF(dc),vvect,svect,nv,&c1);
                                           addp(vl,m,c1,&c);
                           }
                           if ( d ) {
                                   pwrp(vl,p0,d,&t); mulp(vl,t,c,&m);
                                   c = m;
                           }
                           *pr = c;
                   }
           }
   }
   
 void detp(VL vl,P **rmat,int n,P *dp)  void detp(VL vl,P **rmat,int n,P *dp)
 {  {
         int i,j,k,sgn;          int i,j,k,l,sgn,nmin,kmin,lmin,ntmp;
         P mjj,mij,t,s,u,d;          P mjj,mij,t,s,u,d;
         P **mat;          P **mat;
         P *mi,*mj;          P *mi,*mj;
Line 130  void detp(VL vl,P **rmat,int n,P *dp)
Line 181  void detp(VL vl,P **rmat,int n,P *dp)
                 if ( i == n ) {                  if ( i == n ) {
                         *dp = 0; return;                          *dp = 0; return;
                 }                  }
                 for ( k = i; k < n; k++ )                  nmin = nmonop(mat[i][j]);
                         if ( mat[k][j] && (nmonop(mat[k][j]) < nmonop(mat[i][j]) ) )                  kmin=i; lmin=j;
                                 i = k;                  for ( k = j; k < n; k++ )
                 if ( j != i ) {                          for ( l = j; l < n; l++ )
                         mj = mat[j]; mat[j] = mat[i]; mat[i] = mj; sgn = -sgn;                                  if ( mat[k][l] && ((ntmp=nmonop(mat[k][l])) < nmin) ) {
                                           kmin = k; lmin = l; nmin = ntmp;
                                   }
                   if ( kmin != j ) {
                           mj = mat[j]; mat[j] = mat[kmin]; mat[kmin] = mj; sgn = -sgn;
                   }
                   if ( lmin != j ) {
                           for ( k = j; k < n; k++ ) {
                                   t = mat[k][j]; mat[k][j] = mat[k][lmin]; mat[k][lmin] = t;
                           }
                           sgn = -sgn;
                 }                  }
                 for ( i = j + 1, mj = mat[j], mjj = mj[j]; i < n; i++ )                  for ( i = j + 1, mj = mat[j], mjj = mj[j]; i < n; i++ )
                         for ( k = j + 1, mi = mat[i], mij = mi[j]; k < n; k++ ) {                          for ( k = j + 1, mi = mat[i], mij = mi[j]; k < n; k++ ) {

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.14

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>