int main(){vsip_init((void*)0); { void VU_mprint_d(vsip_mview_d*); void VU_mfill_d(vsip_mview_d*, vsip_scalar_d); void VU_vprint_d(vsip_vview_d*); vsip_mview_d *A = vsip_mcreate_d(M,N,VSIP_ROW,0); vsip_mview_d *ATA = vsip_mcreate_d(N,N,VSIP_ROW,0); vsip_vview_d *b = vsip_vcreate_d(M,0); vsip_mview_d *ATB = vsip_mcreate_d(N,1,VSIP_COL,0); vsip_vview_d *ATb = vsip_mcolview_d(ATB,0); { /* store data */ vsip_mput_d(A,0,0,1); vsip_mput_d(A,0,1,2); vsip_mput_d(A,0,2,1); vsip_mput_d(A,1,0,3); vsip_mput_d(A,1,1,-1); vsip_mput_d(A,1,2,0); vsip_mput_d(A,2,0,2); vsip_mput_d(A,2,1,1); vsip_mput_d(A,2,2,-1); vsip_mput_d(A,3,0,1); vsip_mput_d(A,3,1,2); vsip_mput_d(A,3,2,2); vsip_vput_d(b,0,1); vsip_vput_d(b,1,2); vsip_vput_d(b,2,2); vsip_vput_d(b,3,1); } printf("b = \n");VU_vprint_d(b); printf("A = \n");VU_mprint_d(A); VU_mfill_d(ATA,0); vsip_gemp_d(1,A,VSIP_MAT_TRANS,A,VSIP_MAT_NTRANS,1,ATA); printf("ATA = \n");VU_mprint_d(ATA); vsip_vmprod_d(b,A,ATb); printf("ATb = \n"); VU_vprint_d(ATb); { vsip_lu_d* luAop = vsip_lud_create_d(N); vsip_lud_d(luAop,ATA); vsip_lusol_d(luAop,VSIP_MAT_NTRANS,ATB); printf("solve ATA x = ATb\n"); printf("x = \n"); VU_mprint_d(ATB); vsip_lud_destroy_d(luAop); } vsip_valldestroy_d(b); vsip_vdestroy_d(ATb); vsip_mdestroy_d(A); vsip_mdestroy_d(ATA); vsip_mdestroy_d(ATB); }vsip_finalize((void*)0);return 0; }
int main(){vsip_init((void*)0); { vsip_mview_d *A = vsip_mcreate_d(N,N,VSIP_COL,0); vsip_vview_d *x0 = vsip_vcreate_d(N,0); vsip_vview_d *b = vsip_vcreate_d(N,0); vsip_mview_d *X = vsip_mcreate_d(N,3,VSIP_ROW,0); vsip_mview_d *XT = vsip_mcreate_d(N,3,VSIP_COL,0); vsip_vramp_d(1,1,x0); vsip_vmul_d(x0,x0,x0); vsip_mput_d(A,0,0,-3); vsip_mput_d(A,0,1,7); vsip_mput_d(A,0,2,10); vsip_mput_d(A,0,3,12); vsip_mput_d(A,1,0,0); vsip_mput_d(A,1,1,13); vsip_mput_d(A,1,2,18); vsip_mput_d(A,1,3,6); vsip_mput_d(A,2,0,2); vsip_mput_d(A,2,1,-9); vsip_mput_d(A,2,2,6); vsip_mput_d(A,2,3,3); vsip_mput_d(A,3,0,1); vsip_mput_d(A,3,1,2); vsip_mput_d(A,3,2,3); vsip_mput_d(A,3,3,4); {int i,j; printf("A = [\n"); for(i=0; i<N; i++){ for(j=0; j<N; j++) printf("%9.2f%s",vsip_mget_d(A,i,j),(j == N-1) ? "":","); printf(";\n"); } printf("]\n"); } { int k; vsip_vview_d *x; vsip_length L = vsip_mgetrowlength_d(X); for(k=0; k<L; k++){ x = vsip_mcolview_d(X,k); vsip_mvprod_d(A,x0,b); vsip_vcopy_d_d(b,x); vsip_svmul_d(2.0,x0,x0); vsip_vdestroy_d(x); } {int i,j; printf("X = [\n");for(i=0; i<N; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_d(X,i,j),(j == 2) ? "":","); printf(";\n"); } printf("]\n"); } { vsip_lu_d* luAop = vsip_lud_create_d(N); vsip_mcopy_d_d(X,XT); if(luAop == NULL) exit(1); vsip_lud_d(luAop,A); vsip_lusol_d(luAop,0,X); vsip_lusol_d(luAop,1,XT); vsip_lud_destroy_d(luAop); } } {int i,j; printf("A\\X\n"); for(i=0; i<N; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_d(X,i,j),(j == 2) ? "":","); printf(";\n"); } } {int i,j; printf("A'\\X\n"); for(i=0; i<N; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_d(XT,i,j),(j == 2) ? "":","); printf(";\n"); } } { vsip_valldestroy_d(b); vsip_valldestroy_d(x0); vsip_malldestroy_d(X); vsip_malldestroy_d(A); } }vsip_finalize((void*)0);return 1; }
static void lu_destroy(lud_type *s) { vsip_lud_destroy_d(s);}
int main(){vsip_init((void*)0); { vsip_mview_d *A = vsip_mcreate_d(N,N,VSIP_ROW,0); vsip_vview_d *x0 = vsip_vcreate_d(N,0); vsip_vview_d *b = vsip_vcreate_d(N,0); vsip_mview_d *X = vsip_mcreate_d(N,3,VSIP_ROW,0); vsip_mview_d *XT = vsip_mcreate_d(N,3,VSIP_ROW,0); vsip_vramp_d(1,1,x0); vsip_vmul_d(x0,x0,x0); { int i; vsip_vview_d *r = vsip_mrowview_d(A,0); vsip_offset o = vsip_vgetoffset_d(r); for(i=0; i<N; i++){ vsip_vputoffset_d(r,o); vsip_vramp_d(i,1,r); o +=N; } vsip_vdestroy_d(r); } { vsip_vview_d *r = vsip_mdiagview_d(A,0); vsip_vfill_d(0,r); vsip_vdestroy_d(r); } {int i,j; printf("A = [\n"); for(i=0; i<N; i++){ for(j=0; j<N; j++) printf("%9.2f%s",vsip_mget_d(A,i,j),(j == N-1) ? "":","); printf(";\n"); } printf("]\n"); } { int k; vsip_vview_d *x; vsip_length L = vsip_mgetrowlength_d(X); for(k=0; k<L; k++){ x = vsip_mcolview_d(X,k); vsip_mvprod_d(A,x0,b); vsip_vcopy_d_d(b,x); vsip_svmul_d(2.0,x0,x0); vsip_vdestroy_d(x); } {int i,j; printf("X = [\n"); for(i=0; i<N; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_d(X,i,j),(j == 2) ? "":","); printf(";\n"); } printf("]\n"); } {vsip_lu_d* luAop = vsip_lud_create_d(N); vsip_mcopy_d_d(X,XT); if(luAop == NULL) exit(1); vsip_lud_d(luAop,A); vsip_lusol_d(luAop,0,X); vsip_lusol_d(luAop,1,XT); vsip_lud_destroy_d(luAop); } } {int i,j; printf("A\\X\n"); for(i=0; i<N; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_d(X,i,j),(j == 2) ? "":","); printf(";\n"); } } {int i,j; printf("A'\\X\n"); for(i=0; i<N; i++){ for(j=0; j<3; j++) printf("%9.2f%s",vsip_mget_d(XT,i,j),(j == 2) ? "":","); printf(";\n"); } } { vsip_valldestroy_d(b); vsip_valldestroy_d(x0); vsip_malldestroy_d(X); vsip_malldestroy_d(A); } }vsip_finalize((void*)0);return 1; }