int main(int argc, char** argv){ int retval = 0; int i, Navg; param_obj param; kw_obj kw; ts_obj ts; vsip_mview_f *dtaIn, *gramOut; if(retval += param_read(argv[1],¶m)){ printf("Failed to read parameter file\n"); exit(-1); } param_log(¶m); kw_init(&kw, ¶m); ts_init(&ts, ¶m); /* simulate time series and beamform */ Navg = (int) param.Navg; dtaIn = ts_instance(&ts); gramOut = kw_instance(&kw); kw_zero(&kw); for(i=0; i<Navg; i++){ ts_zero(&ts); ts_sim_noise(&ts); ts_sim_nb(&ts); komega(&kw,dtaIn); } /* beamform done. Gram should be in gramOut */ /*************/ /* Massage gram data and save to file for plotting */ for(i=0; i<vsip_mgetrowlength_f(gramOut); i++) {/* move zero to middle */ vsip_vview_f *v = vsip_mcolview_f(gramOut, i); vsip_vfreqswap_f(v); vsip_vdestroy_f(v); } {/* massage the data for plot*/ vsip_scalar_f max = vsip_mmaxval_f(gramOut, NULL),min; vsip_scalar_f avg = vsip_mmeanval_f(gramOut); vsip_mclip_f(gramOut,0.0, max, avg/100000.0, max, gramOut); vsip_mlog10_f(gramOut,gramOut); min = -vsip_mminval_f(gramOut, NULL); vsip_smadd_f(min, gramOut, gramOut); max = vsip_mmaxval_f(gramOut, NULL); vsip_smmul_f(1.0/max, gramOut, gramOut); } { /* output data and plot with octave */ FILE *fptr = fopen("gramOut","w"); size_t size = vsip_mgetrowlength_f(gramOut) * vsip_mgetcollength_f(gramOut); vsip_scalar_f *out = (vsip_scalar_f*)malloc(size * sizeof(vsip_scalar_f)); vsip_mcopyto_user_f(gramOut, VSIP_COL, out); fwrite(out,size,sizeof(vsip_scalar_f),fptr); fclose(fptr); free(out); } /* cleanup */ kw_fin(&kw); ts_fin(&ts); param_free(¶m); return retval; }
int main() { vsip_init((void*)0);{ vsip_mview_f *A = vsip_mcreate_f(NN,NN,VSIP_ROW,VSIP_MEM_NONE); vsip_mview_f *B = vsip_mcreate_f(NN,2,VSIP_COL,VSIP_MEM_NONE); struct tms t_buf; clock_t tclicks; vsip_lu_f *lud = vsip_lud_create_f(NN); printf("data fill in times 1 %lu\n",times(&t_buf)); { int i; vsip_vview_f *r = vsip_mrowview_f(A,0); vsip_offset o = vsip_vgetoffset_f(r); vsip_stride s = vsip_mgetcolstride_f(A); for(i=0; i<NN; i++){ vsip_vputoffset_f(r,o); vsip_vramp_f(i,1,r); o += s; } vsip_vdestroy_f(r); } { vsip_vview_f *r = vsip_mdiagview_f(A,0); vsip_vfill_f(0,r); vsip_vdestroy_f(r); } { vsip_vview_f *r = vsip_mcolview_f(B,0); vsip_vramp_f(1,.01,r); vsip_vdestroy_f(r); r = vsip_mcolview_f(B,1); vsip_vramp_f(2,.01,r); vsip_vdestroy_f(r); } /* printf("A = "); VU_mprintm_f("7.4",A); */ /* printf("B = "); VU_mprintm_f("7.4",B); */ printf("lud in times 2 %lu\n",(tclicks = times(&t_buf))); vsip_lud_f(lud,A); printf("lud out times 3 %lu\n",times(&t_buf) - tclicks); /* printf("Adec = "); VU_mprintm_f("7.4",A); */ printf("lusol in times 4 %lu\n",(tclicks = times(&t_buf))); vsip_lusol_f(lud,VSIP_MAT_NTRANS,B); printf("lusol out times 5 %lu\n",times(&t_buf) - tclicks); /* printf("B = "); VU_mprintm_f("7.4",B); */ } vsip_finalize((void*)0);return 0; }
int VU_qrd_f( vsip_mview_f *A, vsip_mview_f *R){ vsip_length N = vsip_mgetrowlength_f(A); vsip_scalar_f r; vsip_stride cvst = vsip_mgetrowstride_f(A); vsip_offset a0o = vsip_mgetoffset_f(A); vsip_offset ao = a0o; vsip_length i,j; vsip_vview_f *a = vsip_mcolview_f(A,0); vsip_vview_f *q = vsip_mcolview_f(A,0); if((a == NULL) || (q == NULL)){ /* failure to create vector view */ vsip_vdestroy_f(a); /* destroy in case one create worked */ vsip_vdestroy_f(q); return 1; /* zero implies success */ } for(i=0; i<N; i++){ vsip_vputoffset_f(a,a0o); vsip_vputoffset_f(q,a0o); vsip_mput_f(R,i,i,(r = sqrt(vsip_vdot_f(q,q)))); if(r == 0){ /* no devide by zero */ vsip_vdestroy_f(a); /* clean up any creates */ vsip_vdestroy_f(q); return 2; /* zero implies success */ } vsip_svmul_f((1./r),q,q); a0o += cvst; for(j=i+1; j<N; j++){ ao += cvst; vsip_vputoffset_f(a,ao); vsip_mput_f(R,i,j,(r = vsip_vdot_f(q,a))); vsip_mput_f(R,j,i,0); /* make sure lower diagonal is initialized to zero */ vsip_vsma_f(q,-r,a,a); } ao = a0o; } vsip_vdestroy_f(a); /* clean up any creates */ vsip_vdestroy_f(q); return 0; /* zero implies success */ }
void VU_mprodqt_f( vsip_mview_f *C, vsip_mview_f *H, vsip_scalar_f *beta) { vsip_mattr_f attr_C,attr_C0; vsip_mattr_f attr_H0; vsip_vattr_f attr_h,attr_v0; vsip_vview_f *h = vsip_mcolview_f(H,0); vsip_length m,n; vsip_length j; vsip_stride k; vsip_vview_f *v, *w; vsip_mgetattrib_f(C,&attr_C); vsip_vgetattrib_f(h,&attr_h); vsip_mgetattrib_f(H,&attr_H0); attr_C0 = attr_C; m = attr_C.col_length; n = attr_C.row_length; v = vsip_vcreate_f(n,0); vsip_vgetattrib_f(v,&attr_v0); w = vsip_vcreate_f(m,0); vsip_vfill_f(0,v); for(k= attr_H0.row_length - 1; k >= 0; k--){ j = (vsip_length)k; attr_h.offset = j * attr_H0.row_stride + j * attr_H0.col_stride + attr_H0.offset; attr_h.length = attr_H0.col_length - j; vsip_vputlength_f(v,attr_h.length); vsip_vputoffset_f(v,n - attr_h.length); vsip_vputattrib_f(h,&attr_h); vsip_vcopy_f_f(h,v); vsip_vput_f(v,0,1); vsip_vputattrib_f(v,&attr_v0); VU_smvprod_f(-beta[j],C,v,w); VU_opu_f(C,w,v); } printf("here 2\n"); vsip_mputattrib_f(C,&attr_C0); vsip_vdestroy_f(h); vsip_valldestroy_f(v); vsip_valldestroy_f(w); return; }
void VU_qtprodm_f( vsip_mview_f *C, vsip_mview_f *H, vsip_scalar_f *beta) { vsip_mattr_f attr_C,attr_C0; vsip_mattr_f attr_H0; vsip_vattr_f attr_h,attr_v0; vsip_vview_f *h = vsip_mcolview_f(H,0); vsip_length m,n; vsip_length j; vsip_stride k; vsip_vview_f *v, *w; vsip_mgetattrib_f(C,&attr_C); vsip_vgetattrib_f(h,&attr_h); vsip_mgetattrib_f(H,&attr_H0); attr_C0 = attr_C; m = attr_C.col_length; n = attr_C.row_length; v = vsip_vcreate_f(m,0); vsip_vgetattrib_f(v,&attr_v0); w = vsip_vcreate_f(n,0); for(k= 0; k < attr_H0.row_length; k++){ j = (vsip_length)k; attr_h.offset = j * attr_H0.row_stride + j * attr_H0.col_stride + attr_H0.offset; attr_h.length = attr_H0.col_length -j; vsip_vputlength_f(v,attr_h.length); vsip_vputoffset_f(v,m - attr_h.length); vsip_vputattrib_f(h,&attr_h); vsip_vcopy_f_f(h,v); vsip_vput_f(v,0,1); vsip_vputattrib_f(v,&attr_v0); VU_svmprod_f(-beta[j],v,C,w); VU_opu_f(C,v,w); vsip_vput_f(v,k,0); } vsip_mputattrib_f(C,&attr_C0); vsip_vdestroy_f(h); vsip_valldestroy_f(v); vsip_valldestroy_f(w); return; }
int main(){vsip_init((void*)0); { int solretval=0; vsip_scalar_vi i,j; vsip_mview_f *A = vsip_mcreate_f(M, N,VSIP_COL,0); vsip_mview_f *X = vsip_mcreate_f(M,NB,VSIP_ROW,0); /* Nullify the data-space */ for (i=0; i < vsip_mgetcollength_f(A); i++) for(j=0; j < vsip_mgetrowlength_f(A); j++) vsip_mput_f(A,i,j,(double)0); for (i=0; i < vsip_mgetcollength_f(X); i++) for(j=0; j < vsip_mgetrowlength_f(X); j++) vsip_mput_f(X,i,j,(double)0); /* Initialise matrix A */ for (i=0; i<M; i++) for (j = 0; j < N; j++) if(i == j) vsip_mput_f(A,i,j, (double)(M+1)); else vsip_mput_f(A,i,j, -1.0); { /* store data */ /* vsip_mput_f(A,0,0,1); vsip_mput_f(A,0,1,2); vsip_mput_f(A,0,2,1); */ /* vsip_mput_f(A,1,0,3); vsip_mput_f(A,1,1,-1); vsip_mput_f(A,1,2,0); */ /* vsip_mput_f(A,2,0,2); vsip_mput_f(A,2,1,1); vsip_mput_f(A,2,2,-1); */ /* vsip_mput_f(A,3,0,1); vsip_mput_f(A,3,1,2); vsip_mput_f(A,3,2,2); */ /* vsip_mput_f(X,0,0,1); */ /* vsip_mput_f(X,1,0,2); */ /* vsip_mput_f(X,2,0,2); */ /* vsip_mput_f(X,3,0,1); */ } {int i,j; printf("matrix\n A = [\n"); for(i=0; i<M; i++) { for(j=0; j< N; j++) printf("%9.2f%s",vsip_mget_f(A,i,j),(j == N-1) ? "":","); (i==M-1) ? printf(";]\n") : printf(";\n") ; } } { int j, k; vsip_vview_f *y = NULL; vsip_vview_f *x; vsip_length L = NB; vsip_length p = M; for(k=0; k<L; k++) { x = vsip_mcolview_f(X,k); for (j=0; j<p; j++) { y = vsip_mrowview_f(A,j); vsip_vput_f(x,j,(double)(k+1)*(vsip_vsumval_f(y))); /* vsip_vput_f(x,j,(vsip_vsumval_f(y)));*/ vsip_vdestroy_f(y); } vsip_vdestroy_f(x); } } {int i,j; printf("rhs matrix\n B = [\n"); for(i=0; i<NN; i++) { for(j=0; j<NB; j++) printf("%9.2f%s",vsip_mget_f(X,i,j),(j == NB-1) ? "":","); (i==NN-1) ? printf(";]\n") : printf(";\n") ; } } {vsip_qr_f* qrAop = vsip_qrd_create_f(M,N, QOPT); if(qrAop == NULL) exit(1); {int i,j; if(QOPT == VSIP_QRD_SAVEQ1) { printf("qrd returns %i\n",vsip_qrd_f(qrAop,A)); printf("matrix A after factorisation: skinny Q explicitly\n Q1 = [\n"); for(i= 0; i< M ; i++) { for(j=0; j< N; j++) printf("%8.4f %s",vsip_mget_f(A,i,j),(j == N-1) ? "":","); (i == M - 1) ? printf("]\n") : printf(";\n"); } } else if(QOPT == VSIP_QRD_SAVEQ || QOPT == VSIP_QRD_NOSAVEQ) { printf("qrd returns %i\n",vsip_qrd_f(qrAop,A)); printf("matrix A after fact.: R and "); (QOPT == VSIP_QRD_SAVEQ) ? printf("full Q implicitly\n Q/R = [\n") : printf("Q not saved -- ignore LT portion. \n R = [\n"); for(i= 0; i<M ; i++) { for(j=0; j< N; j++) printf("%9.5f %s",vsip_mget_f(A,i,j),(j == N-1) ? "":","); (i == M - 1) ? printf("]\n") : printf(";\n"); } } } if( QPROB == VSIP_LLS) { if (QOPT == VSIP_QRD_SAVEQ1 || QOPT == VSIP_QRD_SAVEQ) { if((solretval=vsip_qrsol_f(qrAop, QPROB, X))) { printf("Warning -- Least Squares soln returns %i -- Check\n", solretval); printf("Upper triang. mat. R, possibly singular\n"); } else printf("Least Squares soln returns %i\n", solretval); } else { printf("Least Squares systems cannot be solved by the NOSAVEQ option --exiting\n"); exit(1); } } else { if((solretval=vsip_qrsol_f(qrAop,QPROB, X))) { printf("Warning -- Covariance soln returns %i -- Check\n",solretval); printf("Upper triang. mat. R, possibly singular\n"); } else printf("Covariance soln returns %i\n",solretval); } vsip_qrd_destroy_f(qrAop); } {int i,j; printf("Soln Matrix\n"); for(i=0; i<N; i++) { for(j=0; j<NB; j++) printf("%9.5f%s",vsip_mget_f(X,i,j),(j == NB-1) ? "":","); printf(";\n"); } } vsip_malldestroy_f(X); vsip_malldestroy_f(A); } vsip_finalize((void*)0); return 1; }
int main() { vsip_init((void*)0); { int i,j; vsip_mview_f *A = vsip_mcreate_f(M,N,VSIP_COL,0); vsip_mview_f *X = vsip_mcreate_f( (NN>= M)?NN:M, (NB>=M)?NB:M, VSIP_ROW,0); /* put the appropriate row, col lengths of X */ X = vsip_mputcollength_f(X,NN); X = vsip_mputrowlength_f(X,NB); /* Initialise matrix A */ for (i=0; i<M; i++) for (j = 0; j < N; j++) if(i == j) vsip_mput_f(A,i,j, (double)(M+1)); else vsip_mput_f(A,i,j, -1.0); { int i,j; printf("matrix\n A = [\n"); for(i=0; i<M; i++) { for(j=0; j< N; j++) printf("%9.2f%s",vsip_mget_f(A,i,j),(j == N-1) ? "":","); (i == M-1)? printf("]\n") : printf(";\n"); } } { int j, k; vsip_vview_f *y = NULL; vsip_vview_f *x; vsip_length L = NB; for(k=0; k<L; k++) { x = vsip_mcolview_f(X,k); for (j=0; j<vsip_vgetlength_f(x); j++) { y = vsip_mrowview_f(A,j); vsip_vput_f(x,j,(double)(k+1)*(vsip_vsumval_f(y))); vsip_vdestroy_f(y); } vsip_vdestroy_f(x); } } { int i,j; printf("rhs matrix\n C = [\n"); for(i=0; i<NN; i++) { for(j=0; j<NB; j++) printf("%9.2f%s",vsip_mget_f(X,i,j),(j == NB-1) ? "":","); (i == NN - 1) ? printf("]\n") : printf(";\n"); } } { vsip_qr_f* qrAop = vsip_qrd_create_f(M,N, QOPT); if(qrAop == NULL) exit(1); { int i,j; if(QOPT == VSIP_QRD_SAVEQ1) { printf("qrd returns %i\n",vsip_qrd_f(qrAop,A)); printf("matrix A after factorisation: skinny Q explicitly\n Q1 = [\n"); for(i= 0; i< M ; i++) { for(j=0; j< N; j++) printf("%9.5f%s",vsip_mget_f(A,i,j),(j == N-1) ? "":","); (i == M - 1) ? printf("]\n") : printf(";\n"); } } else if(QOPT == VSIP_QRD_SAVEQ) { printf("qrd returns %i\n",vsip_qrd_f(qrAop,A)); printf("matrix A after factorisation: R + full Q implicitly\n Q/R = [\n"); for(i= 0; i<M ; i++) { for(j=0; j< N; j++) printf("%9.2f%s",vsip_mget_f(A,i,j),(j == N-1) ? "":","); (i == M-1)? printf("]\n") : printf(";\n"); } } else if(QOPT == VSIP_QRD_NOSAVEQ) { printf("Q is not saved with this option. \n"); printf("Product with Q is invalid, exiting\n"); vsip_qrd_destroy_f(qrAop); vsip_malldestroy_f(X); vsip_malldestroy_f(A); exit(1); } if (opQ == VSIP_MAT_TRANS || opQ == VSIP_MAT_HERM) { if(apQ == VSIP_MAT_RSIDE) /* C * Q^t */ { printf(" This is a product of type C <- C * Q^t \n"); if(vsip_qrdprodq_f(qrAop,opQ,apQ,X)) { printf("Size not conformal or invalid operation by Q: -- exiting\n"); vsip_qrd_destroy_f(qrAop); vsip_malldestroy_f(X); vsip_malldestroy_f(A); exit(1); } else { X = vsip_mputrowlength_f(X,M); } } else if(apQ == VSIP_MAT_LSIDE) /* Q^t * C */ { if(QOPT == 1) printf(" This is a product of type C <- Q^t * C \n"); if(QOPT == 2) printf(" This is a product of type C <- Q_1^t * C \n"); if(vsip_qrdprodq_f(qrAop,opQ,apQ,X)) { printf("Size not conformal or invalid operation by Q: -- exiting\n"); vsip_qrd_destroy_f(qrAop); vsip_malldestroy_f(X); vsip_malldestroy_f(A); exit(1); } else { if(QOPT == 2) X = vsip_mputcollength_f(X,N); } } } else if (opQ == VSIP_MAT_NTRANS) { if(apQ == VSIP_MAT_RSIDE) /* C * Q */ { printf(" This is a product of type C <- C * Q \n"); if(vsip_qrdprodq_f(qrAop,opQ,apQ,X)) { printf("Size not conformal or invalid operation by Q: -- exiting\n"); vsip_qrd_destroy_f(qrAop); vsip_malldestroy_f(X); vsip_malldestroy_f(A); exit(1); } else { X = vsip_mputrowlength_f(X,N); } } else if(apQ == VSIP_MAT_LSIDE) /* Q * C */ { if(QOPT == 1) printf(" This is a product of type C <- Q * C \n"); if(QOPT == 2) printf(" This is a product of type C <- Q_1 * C \n"); if(vsip_qrdprodq_f(qrAop,opQ,apQ,X)) { printf("Size not conformal or invalid operation by Q: -- exiting\n"); vsip_qrd_destroy_f(qrAop); vsip_malldestroy_f(X); vsip_malldestroy_f(A); exit(1); } else { X = vsip_mputcollength_f(X,M); } } } } vsip_qrd_destroy_f(qrAop); } { int i,j; printf("Soln Matrix\n C = [\n"); for(i=0; i< vsip_mgetcollength_f(X); i++) { for(j=0; j< vsip_mgetrowlength_f(X); j++) printf("%8.4f%s",vsip_mget_f(X,i,j), (j == vsip_mgetrowlength_f(X)-1) ? "":","); (i == vsip_mgetcollength_f(X)-1) ? printf("]\n") : printf(";\n"); } } vsip_malldestroy_f(X); vsip_malldestroy_f(A); } vsip_finalize((void*)0); return 1; }
int main() { vsip_init((void*)0);{ vsip_mview_f *A = vsip_mcreate_f(NN,NN,VSIP_COL,0); vsip_vview_f *x0 = vsip_vcreate_f(NN,0); vsip_vview_f *b = vsip_vcreate_f(NN,0); vsip_mview_f *X = vsip_mcreate_f(NN,3,VSIP_ROW,0); vsip_mview_f *XT = vsip_mcreate_f(NN,3,VSIP_COL,0); vsip_vramp_f(1,1,x0); vsip_vmul_f(x0,x0,x0); vsip_mput_f(A,0,0,-3); vsip_mput_f(A,0,1,7); vsip_mput_f(A,0,2,10); vsip_mput_f(A,0,3,12); vsip_mput_f(A,1,0,0); vsip_mput_f(A,1,1,13); vsip_mput_f(A,1,2,18); vsip_mput_f(A,1,3,6); vsip_mput_f(A,2,0,2); vsip_mput_f(A,2,1,-9); vsip_mput_f(A,2,2,6); vsip_mput_f(A,2,3,3); vsip_mput_f(A,3,0,1); vsip_mput_f(A,3,1,2); vsip_mput_f(A,3,2,3); vsip_mput_f(A,3,3,4); {int i,j; printf("A = [\n"); for(i=0; i<NN; i++){ for(j=0; j<NN; j++) printf("%9.2f%s",vsip_mget_f(A,i,j),(j == NN-1) ? "":","); printf(";\n"); } printf("]\n"); } { int k; vsip_vview_f *x; vsip_length L = vsip_mgetrowlength_f(X); for(k=0; k<L; k++){ x = vsip_mcolview_f(X,k); vsip_mvprod_f(A,x0,b); vsip_vcopy_f_f(b,x); vsip_svmul_f(2.0,x0,x0); vsip_vdestroy_f(x); } {int i,j; printf("X = [\n");for(i=0; i<NN; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_f(X,i,j),(j == 2) ? "":","); printf(";\n"); } printf("]\n"); } { vsip_lu_f* luAop = vsip_lud_create_f(NN); vsip_mcopy_f_f(X,XT); if(luAop == NULL) exit(1); vsip_lud_f(luAop,A); { vsip_lu_attr_f attr; vsip_lud_getattr_f(luAop,&attr); printf("lud size %lu\n",attr.n); } vsip_lusol_f(luAop,0,X); vsip_lusol_f(luAop,1,XT); vsip_lud_destroy_f(luAop); } } {int i,j; printf("A\\X\n"); for(i=0; i<NN; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_f(X,i,j),(j == 2) ? "":","); printf(";\n"); } } {int i,j; printf("A'\\X\n"); for(i=0; i<NN; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_f(XT,i,j),(j == 2) ? "":","); printf(";\n"); } } { vsip_valldestroy_f(b); vsip_valldestroy_f(x0); vsip_malldestroy_f(X); vsip_malldestroy_f(A); } }vsip_finalize((void*)0);return 1; }
int main(){vsip_init((void*)0); { vsip_mview_f *Adummy = vsip_mcreate_f(5*NN,5*NN,VSIP_COL,0); vsip_mview_f *A = vsip_msubview_f(Adummy,3,2,NN,NN); vsip_vview_f *x0 = vsip_vcreate_f(NN,0); vsip_mview_f *X = vsip_mcreate_f(NN,3,VSIP_ROW,0); vsip_mview_f *XT = vsip_mcreate_f(NN,3,VSIP_COL,0); vsip_mputrowstride_f(A,2*vsip_mgetrowstride_f(A)); vsip_mputcolstride_f(A,3*vsip_mgetcolstride_f(A)); /* matrix data */ vsip_mput_f(A,0,0,0.5); vsip_mput_f(A,0,1,7); vsip_mput_f(A,0,2,10); vsip_mput_f(A,0,3,12); vsip_mput_f(A,0,4,-3); vsip_mput_f(A,0,5,0); vsip_mput_f(A,0,6,.05); vsip_mput_f(A,1,0,2); vsip_mput_f(A,1,1,13); vsip_mput_f(A,1,2,18); vsip_mput_f(A,1,3,6); vsip_mput_f(A,1,4,0); vsip_mput_f(A,1,5,130); vsip_mput_f(A,1,6,8); vsip_mput_f(A,2,0,3); vsip_mput_f(A,2,1,-9); vsip_mput_f(A,2,2,2); vsip_mput_f(A,2,3,3); vsip_mput_f(A,2,4,2); vsip_mput_f(A,2,5,-9); vsip_mput_f(A,2,6,6); vsip_mput_f(A,3,0,4); vsip_mput_f(A,3,1,2); vsip_mput_f(A,3,2,2); vsip_mput_f(A,3,3,4); vsip_mput_f(A,3,4,1); vsip_mput_f(A,3,5,2); vsip_mput_f(A,3,6,3); vsip_mput_f(A,4,0,.2); vsip_mput_f(A,4,1,2); vsip_mput_f(A,4,2,9); vsip_mput_f(A,4,3,4); vsip_mput_f(A,4,4,1); vsip_mput_f(A,4,5,2); vsip_mput_f(A,4,6,3); vsip_mput_f(A,5,0,.1); vsip_mput_f(A,5,1,2); vsip_mput_f(A,5,2,.3); vsip_mput_f(A,5,3,4); vsip_mput_f(A,5,4,1); vsip_mput_f(A,5,5,2); vsip_mput_f(A,5,6,3); vsip_mput_f(A,6,0,.01); vsip_mput_f(A,6,1,.2); vsip_mput_f(A,6,2,3); vsip_mput_f(A,6,3,4); vsip_mput_f(A,6,4,1); vsip_mput_f(A,6,5,2); vsip_mput_f(A,6,6,3); {int i,j; printf("A = [\n"); for(i=0; i<NN; i++){ for(j=0; j<NN; j++) printf("%9.2f%s",vsip_mget_f(A,i,j),(j == NN-1) ? "":","); printf(";\n"); } printf("]\n"); } { /* were solving for NTRANS Ax = B */ /* use a known X, calculate B using Ax */ int k; vsip_vview_f *x; vsip_mview_f *AT = vsip_mtransview_f(A); vsip_length L = vsip_mgetrowlength_f(X); vsip_vramp_f(1,1,x0); for(k=0; k<L; k++){ x = vsip_mcolview_f(X,k); vsip_mvprod_f(A,x0,x); vsip_svmul_f(2.0,x0,x0); vsip_vdestroy_f(x); } vsip_vramp_f(1,1,x0); for(k=0; k<L; k++){ x = vsip_mcolview_f(XT,k); vsip_mvprod_f(AT,x0,x); vsip_svmul_f(2.0,x0,x0); vsip_vdestroy_f(x); } vsip_mdestroy_f(AT); printf("X = 1 2 4\n 2 4 8\n 3 6 12\n 4 8 16\n 5 10 20\n 6 12 24\n 7 14 28\n"); { int i,j; printf("B = [\n");for(i=0; i<NN; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_f(X,i,j),(j == 2) ? "":","); printf(";\n"); } printf("]\n"); } { /* then solve for B to see if we get X back */ vsip_lu_f* luAop = vsip_lud_create_f(NN); if(luAop == NULL) exit(1); vsip_lud_f(luAop,A); { vsip_lu_attr_f attr; vsip_lud_getattr_f(luAop,&attr); printf("lud size %lu\n",attr.n); } vsip_lusol_f(luAop,VSIP_MAT_NTRANS,X); vsip_lusol_f(luAop,VSIP_MAT_TRANS,XT); vsip_lud_destroy_f(luAop); } } {int i,j; printf("A\\X\n"); for(i=0; i<NN; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_f(X,i,j),(j == 2) ? "":","); printf(";\n"); } } {int i,j; printf("A'\\X\n"); for(i=0; i<NN; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_f(XT,i,j),(j == 2) ? "":","); printf(";\n"); } } { vsip_malldestroy_f(XT); vsip_valldestroy_f(x0); vsip_malldestroy_f(X); vsip_mdestroy_f(A); vsip_malldestroy_f(Adummy); } } vsip_finalize((void*)0); return 1; }