Пример #1
0
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;
}
Пример #2
0
 static int qr_solve(qr_type *qr, vsip_qrd_prob p, matrix_type *m)
 { return vsip_qrsol_f(qr, p, m);}