ssvdc.c
Go to the documentation of this file.
00001 /*
00002    Singular value decomposition 
00003    interfacing with linpack
00004 */
00005 
00006 #include "eus.h"
00007 
00008 #define ismatrix(p) ((isarray(p) && \
00009                       p->c.ary.rank==makeint(2) && \
00010                       elmtypeof(p->c.ary.entity)==ELM_FLOAT))
00011 #define rowsize(p) (intval(p->c.ary.dim[0]))
00012 #define colsize(p) (intval(p->c.ary.dim[1]))
00013 
00014 
00015 /* int r_sign; */
00016 
00017 pointer SSVDC(ctx,n,argv)
00018 context *ctx;
00019 int n;
00020 register pointer argv[];
00021 { pointer a=argv[0];
00022   float *amat,e[10],work[10];
00023   int col,row,ucol,urow,vcol,vrow,flag=11,info;
00024   pointer s,u,v;
00025   numunion nu;
00026 
00027   ckarg(4);
00028   if (!ismatrix(a)) error(E_NOARRAY);
00029   amat=a->c.ary.entity->c.fvec.fv;
00030   col=colsize(a); row=rowsize(a);
00031 
00032   if (debug) printf("ssvdc: row=%d col=%d\n",row,col);
00033 
00034   s=argv[1];
00035   if (!isfltvector(s)) error(E_FLOATVECTOR);
00036   if (vecsize(s)<col) error(E_VECINDEX);
00037 
00038   u=argv[2];
00039   if (!ismatrix(u)) error(E_NOARRAY);
00040   ucol=colsize(u); urow=rowsize(u);
00041   if (ucol!=col || urow!=col) error(E_VECINDEX);
00042 
00043   v=argv[3];
00044   if (!ismatrix(v)) error(E_NOARRAY);
00045   vcol=colsize(v); vrow=rowsize(v);
00046   if (vcol!=row || vrow!=row) error(E_VECINDEX);
00047 
00048   ssvdc_(amat, &col, &col, &row, s->c.fvec.fv,
00049                                  e,
00050                                  u->c.ary.entity->c.fvec.fv,
00051                                  &col,
00052                                  v->c.ary.entity->c.fvec.fv,
00053                                  &row,
00054                                  work,
00055                                  &flag, &info);
00056   return(makeint(info));
00057   }
00058 
00059 ssvdc(ctx,n,argv)
00060 context *ctx;
00061 int n;
00062 pointer argv[];
00063 {
00064   defun(ctx,"SSVDC",argv[0],SSVDC,NULL);}
00065         


euslisp
Author(s): Toshihiro Matsui
autogenerated on Thu Jun 6 2019 18:05:53