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

Diff for /OpenXM_contrib2/asir2000/builtin/array.c between version 1.24 and 1.25

version 1.24, 2001/10/09 01:36:05 version 1.25, 2001/12/20 08:18:26
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/builtin/array.c,v 1.23 2001/10/01 01:58:01 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.24 2001/10/09 01:36:05 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 64  void Pnewvect(), Pnewmat(), Psepvect(), Psize(), Pdet(
Line 64  void Pnewvect(), Pnewmat(), Psepvect(), Psize(), Pdet(
 void Pinvmat();  void Pinvmat();
 void Pnewbytearray();  void Pnewbytearray();
   
   void Pgeneric_gauss_elim();
 void Pgeneric_gauss_elim_mod();  void Pgeneric_gauss_elim_mod();
   
 void Pmat_to_gfmmat(),Plu_gfmmat(),Psolve_by_lu_gfmmat();  void Pmat_to_gfmmat(),Plu_gfmmat(),Psolve_by_lu_gfmmat();
Line 85  struct ftab array_tab[] = {
Line 86  struct ftab array_tab[] = {
         {"solve_by_lu_gfmmat",Psolve_by_lu_gfmmat,4},          {"solve_by_lu_gfmmat",Psolve_by_lu_gfmmat,4},
         {"lu_gfmmat",Plu_gfmmat,2},          {"lu_gfmmat",Plu_gfmmat,2},
         {"mat_to_gfmmat",Pmat_to_gfmmat,2},          {"mat_to_gfmmat",Pmat_to_gfmmat,2},
           {"generic_gauss_elim",Pgeneric_gauss_elim,1},
         {"generic_gauss_elim_mod",Pgeneric_gauss_elim_mod,2},          {"generic_gauss_elim_mod",Pgeneric_gauss_elim_mod,2},
         {"newvect",Pnewvect,-2},          {"newvect",Pnewvect,-2},
         {"vector",Pnewvect,-2},          {"vector",Pnewvect,-2},
Line 622  void Pinvmat(NODE arg,LIST *rp)
Line 624  void Pinvmat(NODE arg,LIST *rp)
                 error("not implemented yet");                  error("not implemented yet");
 #endif  #endif
         }          }
   }
   
   /*
           input : a row x col matrix A
                   A[I] <-> A[I][0]*x_0+A[I][1]*x_1+...
   
           output : [B,R,C]
                   B : a rank(A) x col-rank(A) matrix
                   R : a vector of length rank(A)
                   C : a vector of length col-rank(A)
                   B[I] <-> x_{R[I]}+B[I][0]x_{C[0]}+B[I][1]x_{C[1]}+...
   */
   
   void Pgeneric_gauss_elim(NODE arg,LIST *rp)
   {
           NODE n0;
           MAT m,nm;
           int *ri,*ci;
           VECT rind,cind;
           Q dn,q;
           int i,j,k,l,row,col,t,rank;
   
           asir_assert(ARG0(arg),O_MAT,"generic_gauss_elim");
           m = (MAT)ARG0(arg);
           row = m->row; col = m->col;
           rank = generic_gauss_elim(m,&nm,&dn,&ri,&ci);
           t = col-rank;
           MKVECT(rind,rank);
           MKVECT(cind,t);
           for ( i = 0; i < rank; i++ ) {
                   STOQ(ri[i],q);
                   BDY(rind)[i] = (pointer)q;
           }
           for ( i = 0; i < t; i++ ) {
                   STOQ(ci[i],q);
                   BDY(cind)[i] = (pointer)q;
           }
           n0 = mknode(4,nm,dn,rind,cind);
           MKLIST(*rp,n0);
 }  }
   
 /*  /*

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.25

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