static void VI_solve_lt_f( vsip_mview_f *R, vsip_mview_f *B) { vsip_length N = R->row_length; vsip_mview_f XX = *B; vsip_mview_f *X = &XX; vsip_vview_f xx, rr; vsip_vview_f *x = VI_mrowview_f(X,(vsip_index)0,&xx); vsip_vview_f *r_d = VI_mrowview_f(R,(vsip_index) 0,&rr); vsip_vview_f rr_m = rr; vsip_vview_f *r_m = &rr_m; vsip_stride d_s = R->row_stride + R->col_stride; r_d->length = 1; r_m->length = 0; X->col_length = 1; vsip_svmul_f((vsip_scalar_f) 1.0/(VI_VGET_F(r_d,0)),x,x); N--; while(N-- >0){ r_d->offset += d_s; r_m->length++; r_m->offset += R->col_stride; x->offset += X->col_stride; VI_vsubvmprodIP_f(r_m,X,x); vsip_svmul_f((vsip_scalar_f) 1.0/(VI_VGET_F(r_d,0)),x,x); X->col_length++; } return; }
static void prodG_f(svdObj_f* svd,vsip_index i, vsip_index j,vsip_scalar_f c, vsip_scalar_f s) { vsip_mview_f* L = svd->Ls; vsip_vview_f *a1= col_sv_f(L,svd->ls_one,i); vsip_vview_f *a2= col_sv_f(L,svd->ls_two,j); vsip_vview_f *a1c=vclone_f(a1,svd->t); vsip_svmul_f(c,a1c,a1); vsip_vsma_f(a2,s,a1,a1); vsip_svmul_f(-s,a1c,a1c);vsip_vsma_f(a2,c,a1c,a2); }
static void gtProd_f(vsip_index i, vsip_index j, vsip_scalar_f c,vsip_scalar_f s, svdObj_f* svd) { vsip_mview_f* R = svd->Rs; vsip_vview_f *a1= row_sv_f(R,svd->rs_one, i); vsip_vview_f *a2= row_sv_f(R,svd->rs_two, j); vsip_vview_f *a1c=vclone_f(a1,svd->t); vsip_svmul_f(c,a1c,a1); vsip_vsma_f(a2,s,a1,a1); vsip_svmul_f(-s,a1c,a1c); vsip_vsma_f(a2,c,a1c,a2); }
int main (int argc, const char * argv[]) { int retval = vsip_init((void*)0); vsip_length N0 = 11; vsip_spline_f *spl = vsip_spline_create_f(N0); vsip_length N = 201; vsip_vview_f *yf = vsip_vcreate_f(N,VSIP_MEM_NONE); vsip_vview_f *xf = vsip_vcreate_f(N,VSIP_MEM_NONE); vsip_vview_f *xp = vsip_vcreate_f(N0,VSIP_MEM_NONE); vsip_vview_f *yp = vsip_vcreate_f(N0,VSIP_MEM_NONE); vsip_vramp_f(0.0,1.0,xp); vsip_vramp_f(0.0,0.05,xf); vsip_svmul_f(2.0/5.0 * M_PI,xp,yp); vsip_vsin_f(yp,yp); printf("xp = ");VPRINT(xp); printf("yp = ");VPRINT(yp); printf("xf = ");VPRINT(xf); vsip_vinterp_spline_f(xp,yp,spl,xf,yf); printf("spline = ");VPRINT(yf); vsip_spline_destroy_f(spl); vsip_valldestroy_f(xf); vsip_valldestroy_f(xp); vsip_valldestroy_f(yp); vsip_valldestroy_f(yf); vsip_finalize((void*)0); return retval; }
/* sign function as defined in http://www.netlib.org/lapack/lawnspdf/lawn148.pdf */ static vsip_scalar_f sign_f(vsip_scalar_f a_in) { if(a_in < 0.0) return -1.0; else return 1.0; } /* same */ static void biDiagPhaseToZero_f( svdObj_f *svd) { vsip_mview_f *L = svd->L; vsip_vview_f *d = svd->d; vsip_vview_f *f = svd->f; vsip_mview_f *R = svd->R; vsip_scalar_f eps0 = svd->eps0; vsip_length n_d=vsip_vgetlength_f(d); vsip_length n_f=vsip_vgetlength_f(f); vsip_index i,j; vsip_scalar_f ps; vsip_scalar_f m; vsip_vview_f *l = svd->ls_one; vsip_vview_f *r = svd->rs_one; for(i=0; i<n_d; i++){ ps=vsip_vget_f(d,i); m = vsip_mag_f(ps); ps=sign_f(ps); if(m > eps0){ col_sv_f(L,l,i);vsip_svmul_f(ps,l,l); vsip_vput_f(d,i,m); if (i < n_f) vsip_vput_f(f,i,ps*vsip_vget_f(f,i)); } else { vsip_vput_f(d,i,0.0); } } svdZeroCheckAndSet_f(eps0,d,f); for (i=0; i<n_f-1; i++){ j=i+1; ps = vsip_vget_f(f,i); m = vsip_mag_f(ps); ps=sign_f(ps); col_sv_f(L, l, j);vsip_svmul_f(ps,l,l); row_sv_f(R,r,j);vsip_svmul_f(ps,r,r); vsip_vput_f(f,i,m); vsip_vput_f(f,j,ps * vsip_vget_f(f,j)); } j=n_f; i=j-1; ps=vsip_vget_f(f,i); m=vsip_mag_f(ps); ps=sign_f(ps); vsip_vput_f(f,i,m); col_sv_f(L, l, j);vsip_svmul_f(ps,l,l); row_sv_f(R,r,j);vsip_svmul_f(ps,r,r); }
/* sign function as defined in http://www.netlib.org/lapack/lawnspdf/lawn148.pdf */ static vsip_scalar_f sign_f(vsip_scalar_f a_in) { if(a_in < 0.0) return -1.0; else return 1.0; } /* same */ static void biDiagPhaseToZero_f( svdObj_f *svd) { vsip_mview_f *L = svd->L; vsip_vview_f *d = svd->d; vsip_vview_f *f = svd->f; vsip_mview_f *R = svd->R; vsip_scalar_f eps0 = svd->eps0; vsip_length n_d=vsip_vgetlength_f(d); vsip_length n_f=vsip_vgetlength_f(f); vsip_index i,j; vsip_scalar_f ps; vsip_scalar_f m; vsip_vview_f *l = svd->ls_one; vsip_vview_f *r = svd->rs_one; for(i=0; i<n_d; i++){ ps=vsip_vget_f(d,i); m = vsip_mag_f(ps); ps=sign_f(ps); if(m > eps0){ col_sv_f(L,l,i);vsip_svmul_f(ps,l,l); vsip_vput_f(d,i,m); if (i < n_f) vsip_vput_f(f,i,ps*vsip_vget_f(f,i)); } else { vsip_vput_f(d,i,0.0); } } svdZeroCheckAndSet_f(eps0,d,f); for (i=0; i<n_f-1; i++){ j=i+1; ps = vsip_vget_f(f,i); m = vsip_mag_f(ps); ps=sign_f(ps); col_sv_f(L, l, j);vsip_svmul_f(ps,l,l); row_sv_f(R,r,j);vsip_svmul_f(ps,r,r); vsip_vput_f(f,i,m); vsip_vput_f(f,j,ps * vsip_vget_f(f,j)); } j=n_f; i=j-1; ps=vsip_vget_f(f,i); m=vsip_mag_f(ps); ps=sign_f(ps); vsip_vput_f(f,i,m); col_sv_f(L, l, j);vsip_svmul_f(ps,l,l); row_sv_f(R,r,j);vsip_svmul_f(ps,r,r); } static void phaseCheck_f(svdObj_f *svd) { biDiagPhaseToZero_f(svd); } void houseProd_f(vsip_vview_f *v, vsip_mview_f *A) { vsip_mattr_f a_atr; vsip_vview_f *w; vsip_mview_f *B; vsip_mgetattrib_f(A,&a_atr); B=vsip_mcreate_f(a_atr.col_length,a_atr.row_length,VSIP_ROW,VSIP_MEM_NONE); w = vsip_vcreate_f(a_atr.row_length,VSIP_MEM_NONE); vsip_scalar_f beta = 2.0/vsip_vdot_f(v,v); vsip_vmprod_f(v,A,w); vsip_vouter_f(beta,v,w,B); vsip_msub_f(A,B,A); vsip_valldestroy_f(w); vsip_malldestroy_f(B); } /* need to remove create */ void prodHouse_f(vsip_mview_f *A, vsip_vview_f *v) { vsip_mattr_f a_atr; vsip_vview_f *w; vsip_mview_f *B; vsip_mgetattrib_f(A,&a_atr); B=vsip_mcreate_f(a_atr.col_length,a_atr.row_length,VSIP_ROW,VSIP_MEM_NONE); w = vsip_vcreate_f(a_atr.col_length,VSIP_MEM_NONE); vsip_scalar_f beta = 2.0/vsip_vdot_f(v,v); vsip_mvprod_f(A,v,w); vsip_vouter_f(beta,w,v,B); vsip_msub_f(A,B,A); vsip_valldestroy_f(w); vsip_malldestroy_f(B); } /* need to remove create */ static vsip_vview_f *houseVector_f(vsip_vview_f* x) { vsip_scalar_f nrm=vnorm2_f(x); vsip_scalar_f t = vsip_vget_f(x,0); vsip_scalar_f s = t + sign_f(t) * nrm; vsip_vput_f(x,0,s); nrm = vnorm2_f(x); if (nrm == 0.0) vsip_vput_f(x,0,1.0); else vsip_svmul_f(1.0/nrm,x,x); return x; }
static void bidiag_f(svdObj_f *svd) { vsip_mview_f *B = svd->B; vsip_mview_f *Bs = svd->Bs; vsip_length m = vsip_mgetcollength_f(B); vsip_length n = vsip_mgetrowlength_f(B); vsip_vview_f *x=col_sv_f(B,svd->bs,0); vsip_vview_f *v=vclone_f(x,svd->t); vsip_vview_f *vs = svd->ts; vsip_index i,j; for(i=0; i<n-1; i++){ vsip_vputlength_f(v,m-i); vsip_vcopy_f_f(col_sv_f(msv_f(B,Bs,i,i),x,0),v); houseVector_f(v); vsip_svmul_f(1.0/vsip_vget_f(v,0),v,v); houseProd_f(v,Bs); vsip_vcopy_f_f(vsv_f(v,vs,1),vsv_f(x,x,1)); if(i < n-2){ j = i+1; vsip_vputlength_f(v,n-j); vsip_vcopy_f_f(row_sv_f(msv_f(B,Bs,i,j),x,0),v); houseVector_f(v); vsip_svmul_f(1.0/vsip_vget_f(v,0),v,v); prodHouse_f(Bs,v); vsip_vcopy_f_f(vsv_f(v,vs,1),vsv_f(x,x,1)); } } if(m > n){ i=n-1; vsip_vputlength_f(v,m-i); vsip_vcopy_f_f(col_sv_f(msv_f(B,Bs,i,i),x,0),v); houseVector_f(v); vsip_svmul_f(1.0/vsip_vget_f(v,0),v,v); houseProd_f(v,Bs); vsip_vcopy_f_f(vsv_f(v,vs,1),vsv_f(x,x,1)); } }
int VU_vfrdB_f(vsip_vview_f *a,vsip_scalar_f range) { int ret = 0; vsip_length N_len=vsip_vgetlength_f(a); vsip_cvview_f *ca=vsip_cvcreate_f(N_len,VSIP_MEM_NONE); vsip_fft_f *fft = vsip_ccfftip_create_f( N_len,1,VSIP_FFT_FWD,0,0); vsip_vview_f *ra = vsip_vrealview_f(ca), *ia = vsip_vimagview_f(ca), *ta = vsip_vcloneview_f(a); vsip_offset s = (vsip_offset)vsip_vgetstride_f(ta); if((ca == NULL) || (fft == NULL) || (ra == NULL) || (ia == NULL) || (ta == NULL)){ret = 1; }else{ vsip_vfill_f(0,ia); vsip_vcopy_f_f(a,ra); vsip_ccfftip_f(fft,ca); vsip_vcmagsq_f(ca,ra); { vsip_index ind;/* scale by "range" min to max*/ vsip_scalar_f max = vsip_vmaxval_f(ra,&ind); vsip_scalar_f min = max * range; vsip_vclip_f(ra,min,max,min,max,ra); } if(N_len%2){vsip_length Nlen = N_len/2; vsip_vputlength_f(ta,Nlen+1); vsip_vputlength_f(ra,Nlen+1); vsip_vputoffset_f(ta,Nlen * s); vsip_vcopy_f_f(ra,ta); vsip_vputlength_f(ra,Nlen); vsip_vputlength_f(ta,Nlen); vsip_vputoffset_f(ta,vsip_vgetoffset_f(a)); vsip_vputoffset_f(ra,Nlen+1); vsip_vcopy_f_f(ra,ta); }else{vsip_length Nlen = N_len/2; vsip_vcopy_f_f(ra,ta); vsip_vputlength_f(ta,Nlen); vsip_vputlength_f(a,Nlen); vsip_vputoffset_f(ta,(vsip_offset)(Nlen) * s); vsip_vswap_f(ta,a); vsip_vputlength_f(a,N_len); }vsip_vlog10_f(a,a);vsip_svmul_f(10,a,a); }vsip_fft_destroy_f(fft); vsip_vdestroy_f(ra); vsip_vdestroy_f(ia); vsip_cvalldestroy_f(ca);vsip_vdestroy_f(ta); return ret; }
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 */ }
/* Below we implement example from "help interp1" in octave 2.9.9 * xf=[0:0.05:10]; yf = sin(2*pi*xf/5); * xp=[0:10]; yp = sin(2*pi*xp/5); * lin=interp1(xp,yp,xf); */ int main (int argc, const char * argv[]) { int retval = vsip_init((void*)0); vsip_length N0 = 11; vsip_length N = 201; vsip_length M = 3; vsip_mview_f *yf = vsip_mcreate_f(M,N,VSIP_ROW,VSIP_MEM_NONE); vsip_vview_f *xf = vsip_vcreate_f(N,VSIP_MEM_NONE); vsip_vview_f *xp = vsip_vcreate_f(N0,VSIP_MEM_NONE); vsip_mview_f *yp = vsip_mcreate_f(M,N0,VSIP_COL,VSIP_MEM_NONE); vsip_vview_f *yp0 = vsip_mrowview_f(yp,0); vsip_vview_f *yp1 = vsip_mrowview_f(yp,1); vsip_vview_f *yp2 = vsip_mrowview_f(yp,2); vsip_vramp_f(0.0,1.0,xp); vsip_vramp_f(0.0,0.05,xf); vsip_svmul_f(2.0/5.0 * M_PI,xp,yp0); vsip_svadd_f(M_PI/8.0,yp0,yp1); vsip_svadd_f(M_PI/8.0,yp1,yp2); vsip_vsin_f(yp0,yp0); vsip_vsin_f(yp1,yp1); vsip_vsin_f(yp2,yp2); printf("xp = ");VPRINT(xp); printf("yp = ");MPRINT(yp); printf("xf = ");VPRINT(xf); vsip_minterp_linear_f(xp,yp,VSIP_ROW,xf,yf); printf("linear = "); MPRINT(yf); vsip_vdestroy_f(yp0); vsip_vdestroy_f(yp1); vsip_vdestroy_f(yp2); vsip_valldestroy_f(xf); vsip_valldestroy_f(xp); vsip_malldestroy_f(yp); vsip_malldestroy_f(yf); vsip_finalize((void*)0); return retval; }
int main(){vsip_init((void*)0); { int i,j; /* counters */ vsip_vview_f *windowt = vsip_vcreate_hanning_f(Ns,0); vsip_vview_f *windowp = vsip_vcreate_hanning_f(Mp,0); vsip_vview_f *kernel = vsip_vcreate_kaiser_f(Nfilter,kaiser,0); vsip_fir_f *fir = vsip_fir_create_f(kernel, VSIP_NONSYM,2 * Nn,2,VSIP_STATE_SAVE,0,0); vsip_vview_f *t =vsip_vcreate_f(Ns,0); /*time vector*/ vsip_vview_f *noise[Nnoise]; vsip_vview_f *nv = vsip_vcreate_f(2 * Nn,0); vsip_vview_f *tt = vsip_vcreate_f(Ns,0); vsip_mview_f *data = vsip_mcreate_f(Mp,Ns,VSIP_ROW,0), *rmview; vsip_vview_f *data_v, *gram_v; vsip_cvview_f *gram_data_v; vsip_cmview_f *gram_data = vsip_cmcreate_f(Mp,Ns/2 + 1,VSIP_COL,0); vsip_mview_f *gram = vsip_mcreate_f(Mp,Ns/2 + 1,VSIP_ROW,0); vsip_mview_f *Xim = vsip_mcreate_f(Mp,Mp+1,VSIP_ROW,0); vsip_scalar_f alpha = (D * Fs) / c; vsip_vview_f *m = vsip_vcreate_f(Mp,0); vsip_vview_f *Xi = vsip_vcreate_f(Mp + 1,0); vsip_randstate *state = vsip_randcreate(15,1,1,VSIP_PRNG); vsip_scalar_f w0 = 2 * M_PI * F0/Fs; vsip_scalar_f w1 = 2 * M_PI * F1/Fs; vsip_scalar_f w2 = 2 * M_PI * F2/Fs; vsip_scalar_f w3 = 2 * M_PI * F3/Fs; vsip_scalar_f cnst1 = M_PI/Nnoise; vsip_offset offset0 = (vsip_offset)(alpha * Mp + 1); vsip_fftm_f *rcfftmop_obj = /* time fft */ vsip_rcfftmop_create_f(Mp,Ns,1,VSIP_ROW,0,0); vsip_fftm_f *ccfftmip_obj = vsip_ccfftmip_create_f(Mp,Ns/2 + 1,VSIP_FFT_FWD,1,VSIP_COL,0,0); vsip_vramp_f(0,1,m); vsip_vramp_f(0,M_PI/Mp,Xi); vsip_vcos_f(Xi,Xi); vsip_vouter_f(alpha,m,Xi,Xim); { vsip_vview_f *gram_v = vsip_mrowview_f(gram,0); vsip_vputlength_f(gram_v,Mp*(Ns/2 + 1)); vsip_vfill_f(0,gram_v); vsip_vdestroy_f(gram_v); } for(j=0; j<Nnoise; j++){ noise[j] = vsip_vcreate_f(Nn,0); vsip_vrandn_f(state,nv); vsip_firflt_f(fir,nv,noise[j]); vsip_svmul_f(12.0/(Nnoise),noise[j],noise[j]); vsip_vputlength_f(noise[j],Ns); } vsip_vramp_f(0,1.0,t); /* time vector */ for(i=0; i<Mp; i++){ vsip_scalar_f Xim_val = vsip_mget_f(Xim,i,Theta_o); data_v = vsip_mrowview_f(data,i); vsip_vsmsa_f(t,w0,-w0 * Xim_val,tt); vsip_vcos_f(tt,data_v); /*F0 time series */ vsip_vsmsa_f(t,w1,-w1 * Xim_val,tt); vsip_vcos_f(tt,tt); /*F1 time series */ vsip_vadd_f(tt,data_v,data_v); vsip_vsmsa_f(t,w2,-w2 * Xim_val,tt); vsip_vcos_f(tt,tt); /*F2 time series */ vsip_vadd_f(tt,data_v,data_v); vsip_vsmsa_f(t,w3,-w3 * Xim_val,tt); vsip_vcos_f(tt,tt); /*F3 time series */ vsip_svmul_f(3.0,tt,tt); /* scale by 3.0 */ vsip_vadd_f(tt,data_v,data_v); vsip_svmul_f(3,data_v,data_v); for(j=0; j<Nnoise; j++){ /* simple time delay beam forming for noise */ vsip_vputoffset_f(noise[j],offset0 + (int)( i * alpha * cos(j * cnst1))); vsip_vadd_f(noise[j],data_v,data_v); } /* need to destroy before going on to next phone */ vsip_vdestroy_f(data_v); } /* window the data and the array to reduce sidelobes */ vsip_vmmul_f(windowt,data,VSIP_ROW,data); vsip_vmmul_f(windowp,data,VSIP_COL,data); /* do ffts */ vsip_rcfftmop_f(rcfftmop_obj,data,gram_data); vsip_ccfftmip_f(ccfftmip_obj,gram_data); { /* scale gram to db, min 0 max 255 */ vsip_index ind; gram_v = vsip_mrowview_f(gram,0); gram_data_v = vsip_cmcolview_f(gram_data,0); rmview = vsip_mrealview_f(gram_data); vsip_vputlength_f(gram_v,Mp*(Ns/2 + 1)); vsip_cvputlength_f(gram_data_v,Mp*(Ns/2 + 1)); data_v = vsip_vrealview_f(gram_data_v); vsip_vcmagsq_f(gram_data_v,data_v); vsip_mcopy_f_f(rmview,gram); vsip_vdestroy_f(data_v); vsip_svadd_f(1.0 - vsip_vminval_f(gram_v,&ind),gram_v,gram_v); vsip_vlog10_f(gram_v,gram_v); vsip_svmul_f(256.0 / vsip_vmaxval_f(gram_v,&ind), gram_v,gram_v);/* scale */ /* reorganize the data to place zero in the center for direction space */ data_v = vsip_vcloneview_f(gram_v); vsip_vputlength_f(data_v,(Mp/2) * (Ns/2 + 1)); vsip_vputoffset_f(data_v,(Mp/2) * (Ns/2 + 1)); vsip_vputlength_f(gram_v,(Mp/2) * (Ns/2 + 1)); vsip_vswap_f(data_v,gram_v); vsip_vdestroy_f(gram_v); vsip_vdestroy_f(data_v); vsip_cvdestroy_f(gram_data_v); vsip_mdestroy_f(rmview); } VU_mprintgram_f(gram,"gram_output"); } vsip_finalize((void*)0); return 0; }
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; }