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; }
static int qr_solve(qr_type *qr, vsip_qrd_prob p, matrix_type *m) { return vsip_qrsol_f(qr, p, m);}