Пример #1
0
void VU_mprintgram_f(vsip_mview_f* M,char* fname)
{   vsip_length RL = vsip_mgetrowlength_f(M);
    vsip_length CL = vsip_mgetcollength_f(M);
    FILE *of = fopen(fname,"w");
    vsip_length row,col;
    for(row = 0; row<CL; row++)
       for(col=0; col<RL; col++)
         fprintf(of,"%ld %ld %3.0f\n",
            row,col,vsip_mget_f(M,row,col));
    fclose(of);
    return;
}
Пример #2
0
PyObject *mcopyToListByCol_f(vsip_mview_f *v){
    vsip_length M = vsip_mgetcollength_f(v);
    vsip_length N = vsip_mgetrowlength_f(v);
    PyObject *retval = PyList_New(M);
    vsip_index i,j;
    for(j=0; j<N; j++){
        PyObject *col = PyList_New(M);
        for(i=0; i<M; i++){
           double x = (double)vsip_mget_f(v,i,j);
           PyList_SetItem(col,i,PyFloat_FromDouble(x));
        }
        PyList_SetItem(retval,j,col);
    }
    return retval;
}
Пример #3
0
void VU_mprint_f(vsip_mview_f *X)
{
    vsip_length RL = vsip_mgetrowlength_f(X);
    vsip_length CL = vsip_mgetcollength_f(X);
    vsip_length row,col;
    vsip_scalar_f x;
    printf("[\n");
    for(row=0; row<CL; row++) {
        for(col=0; col<RL; col++) {
            x=vsip_mget_f(X,row,col);
            printf("%6.4f %s",x,((col==(RL-1)) ? ";" : " "));
        }
        printf("\n");
    }
    printf("];\n");
    return;
}
Пример #4
0
int main(){vsip_init((void*)0);
{

    int i,j;
    vsip_vview_f* a  = vsip_vcreate_f(M,0);
    vsip_vview_f* b  = vsip_vcreate_f(N,0);
    vsip_mview_f* r = vsip_mcreate_f(
                      vsip_vgetlength_f(a),
                      vsip_vgetlength_f(b),
                      VSIP_ROW,0);
    vsip_vramp_f(1.0, 1.0 , b);
    vsip_vramp_f(1.0, -2.0/(double)(N-1), a);

    vsip_vouter_f(1,a, b, r);
    printf("a = [\n");
    for(i=0; i<vsip_vgetlength_f(a); i++)
        printf("%6.3f%s\n", vsip_vget_f(a,i),
        (i == vsip_vgetlength_f(a) -1) ? "":";");
    printf("]\n");
    printf("b = [\n");
    for(i=0; i<vsip_vgetlength_f(b); i++)
        printf("%6.3f%s\n", vsip_vget_f(b,i),
        (i == vsip_vgetlength_f(a) -1) ? "":";");
        printf("]\n");
    printf("\na * b' = \n");
    for(i=0; i<vsip_vgetlength_f(a); i++){
       for(j=0; j<vsip_vgetlength_f(b); j++) 
          printf("%6.3f  ",vsip_mget_f(r,i,j));
       printf("\n");
    }
    printf("]\n");

    /*destroy the vector views and any associated blocks*/
    vsip_valldestroy_f(b);
    vsip_valldestroy_f(a);
    vsip_malldestroy_f(r);
    } vsip_finalize((void*)0); return 0;
}
Пример #5
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;
}
Пример #6
0
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;        
}
Пример #7
0
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;
}
Пример #8
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;
}
Пример #9
0
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;
}