Go to the documentation of this file.00001
00002
00003
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
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);}
00065