void VU_cmprintm_f(char s[],
    vsip_cmview_f *X)
{
    char format[50];
    vsip_length RL = vsip_cmgetrowlength_f(X);
    vsip_length CL = vsip_cmgetcollength_f(X);
    vsip_length row,col;
    vsip_cscalar_f x;
    strcpy(format,"(%");
    strcat(format,s);
    strcat(format,"f %+");
    strcat(format,s);
    strcat(format,"fi) %s");
    printf("[\n");	
    for(row=0; row<CL; row++){
      for(col=0; col<RL; col++){
        x=vsip_cmget_f(X,row,col);
        printf(format,vsip_real_f(x),
                      vsip_imag_f(x),
               ((col==(RL-1)) ? ";" : " "));
      }  
      printf("\n");
    }
    printf("];\n");
    return;
}
void VU_copu_f(
    vsip_cmview_f *A,
    vsip_cvview_f *x,
    vsip_cvview_f *y)
{
     vsip_length m = vsip_cmgetcollength_f(A);
     vsip_length n = vsip_cmgetrowlength_f(A);
     vsip_length i,j;
     vsip_cscalar_f temp;
     for(i=0; i<m; i++)
         for(j=0; j<n; j++){
             temp = vsip_cmul_f(vsip_cvget_f(x,i),vsip_cvget_f(y,j));
             vsip_cmput_f(A,i,j,vsip_cadd_f(vsip_cmget_f(A,i,j),temp));
         }
     return;
}
void VU_cmprint_f(vsip_cmview_f *X)
{
    vsip_length RL = vsip_cmgetrowlength_f(X);
    vsip_length CL = vsip_cmgetcollength_f(X);
    vsip_length row,col;
    vsip_cscalar_f x;
    printf("[\n");
    for(row=0; row<CL; row++){
      for(col=0; col<RL; col++){
        x=vsip_cmget_f(X,row,col);
        printf("(%6.4f %+6.4fi%s ",vsip_real_f(x),vsip_imag_f(x),((col==(RL-1)) ? ");" : ")"));
      }  
      printf("\n");
    }
    printf("];\n");
    return;
}
Example #4
0
/* matrix copy by col */
PyObject *cmcopyToListByCol_f(vsip_cmview_f *v){
    PyObject *cval;
    vsip_length M = vsip_cmgetcollength_f(v);
    vsip_length N = vsip_cmgetrowlength_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++){
           vsip_cscalar_f x = vsip_cmget_f(v,i,j);
           double re = (double)x.r;
           double im = (double)x.i;
           cval = PyComplex_FromDoubles(re,im);
           PyList_SetItem(col,i,cval);
        }
        PyList_SetItem(retval,j,col);
    }
    return retval;
}
int main(){vsip_init((void*)0);
{
   vsip_cmview_f *A = vsip_cmcreate_f(M,P,VSIP_ROW,0),
                 *B = vsip_cmcreate_f(N,P,VSIP_ROW,0),
                 *R = vsip_cmcreate_f(M,N,VSIP_ROW,0);
   int i, j;
   for(i=0;i<M;i++) for(j=0;j<P;j++)
        vsip_cmput_f(A,i,j,vsip_cmplx_f(i,1 + sqrt(i*j)));
   
   for(i=0;i<N;i++) for(j=0;j<P;j++)
        vsip_cmput_f(B,i,j,vsip_cmplx_f(1 , i * j));
   
   printf("\n A input \n");
   vsip_cmprodh_f(A,B,R);
   {for(i=0;i<M;i++) {for(j=0;j<P;j++){
           printf(": (%5.2f, %5.2f) ",
             vsip_real_f(vsip_cmget_f(A,i,j)),
             vsip_imag_f(vsip_cmget_f(A,i,j)));
           }
       printf(":\n");
       }
   }
   printf("\n B input \n");
   {for(i=0;i<N;i++) {for(j=0;j<P;j++){
           printf(": (%5.2f, %5.2f) ",
             vsip_real_f(vsip_cmget_f(B,i,j)),
             vsip_imag_f(vsip_cmget_f(B,i,j)));
           }
       printf(":\n");
       }
   }
   printf("\n R output \n");
   {for(i=0;i<M;i++) {for(j=0;j<N;j++){
           printf(": (%5.2f, %5.2f) ",
             vsip_real_f(vsip_cmget_f(R,i,j)),
             vsip_imag_f(vsip_cmget_f(R,i,j)));
           }
       printf(":\n");
       }
   }
   vsip_cmalldestroy_f(A);
   vsip_cmalldestroy_f(B);
   vsip_cmalldestroy_f(R);
   } vsip_finalize((void*)0); return 0;
}
Example #6
0
int main(){vsip_init((void*)0);
{
    int i,j, solretval=0;
    vsip_cmview_f *A  = vsip_cmcreate_f(M,N,VSIP_COL,0);
    vsip_cmview_f *X  = vsip_cmcreate_f(M,NB,VSIP_ROW,0);

    /* Nullify the data-space */
    for (i=0; i <  vsip_cmgetcollength_f(A); i++)
      for(j=0; j < vsip_cmgetrowlength_f(A); j++)
        vsip_cmput_f(A,i,j,vsip_cmplx_f(0,0));

    for (i=0; i <  vsip_cmgetcollength_f(X); i++)
      for(j=0; j <  vsip_cmgetrowlength_f(X); j++)
        vsip_cmput_f(X,i,j,vsip_cmplx_f(0,0));

    /* Initialise matrix A */
    for (i=0; i<M; i++)
      for (j = 0; j < N; j++)
	if(i == j) 
          vsip_cmput_f(A,i,j,vsip_cmplx_f(M+1, 0));
        else if(i > j)
          vsip_cmput_f(A,i,j, vsip_cmplx_f(1,1));
        else if(i < j)
          vsip_cmput_f(A,i,j,vsip_cmplx_f(1,-1));


    {int i,j; 
    printf("A matrix\nA = [\n");
    for(i=0; i<M; i++)
      {
	for(j=0; j< N; j++) 
	  printf("%6.2f+%6.2fi%s",
                     vsip_real_f(vsip_cmget_f(A,i,j)),
                     vsip_imag_f(vsip_cmget_f(A,i,j)),(j == N-1) ? "":",");
                   (i == M - 1) ? printf("]\n") : printf(";\n");
      }
    }
    { int j, k; 
    vsip_cvview_f *y = NULL;
    vsip_cvview_f *x;
    vsip_vview_f *yr = NULL, *yi = NULL;

    vsip_length L    = NB;
    vsip_length p    = M;
    for(k=0; k<L; k++)
      {
        x  = vsip_cmcolview_f(X,k);
	for (j=0; j<p; j++)
	  {
	    y  = vsip_cmrowview_f(A,j);
            yr = vsip_vrealview_f(y);
            yi = vsip_vimagview_f(y);
	    vsip_cvput_f(x,j, vsip_cmplx_f((double)(k+1)*(vsip_vsumval_f(yr)),
                             (double) (k+1)*(vsip_vsumval_f(yi))));
	    /* vsip_vput_f(x,j,(vsip_vsumval_f(y)));*/
	   vsip_cvdestroy_f(y);
           vsip_vdestroy_f(yr);
           vsip_vdestroy_f(yi);
	  }
        vsip_cvdestroy_f(x);
      }
    }
    {int i,j; 
    printf("rhs matrix\nB = [\n");
    for(i=0; i<NN; i++)
      {
	for(j=0; j<NB; j++) 
	  printf("%7.2f+%7.2fi%s",
                     vsip_real_f(vsip_cmget_f(X,i,j)),
                     vsip_imag_f(vsip_cmget_f(X,i,j)),(j == NB-1) ? "":",");
                   (i == NN - 1) ? printf("]\n") : printf(";\n");
      }
    }
    {vsip_cqr_f* qrAop = vsip_cqrd_create_f(M,N, QOPT);
    if(qrAop == NULL) exit(1);

    {int i,j;
    printf("matrix A after factorisation\n R/Q -- \n");
    if(QOPT == VSIP_QRD_SAVEQ1)
    {
      printf("qrd } returns %i\n",vsip_cqrd_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+%8.4fi%s",
                     vsip_real_f(vsip_cmget_f(A,i,j)),
                     vsip_imag_f(vsip_cmget_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_cqrd_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+%9.5fi%s",
                     vsip_real_f(vsip_cmget_f(A,i,j)),
                     vsip_imag_f(vsip_cmget_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_cqrsol_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_cqrsol_f(qrAop,QPROB, X)))
      {
	printf("Covariance soln returns %i\n",solretval);
	printf("Upper triang. mat. R, possibly singular\n");
      }
      else
      printf("Covariance soln returns %i\n",solretval);
    }
    vsip_cqrd_destroy_f(qrAop);
    }

    {int i,j;
    printf("Soln Matrix\nX = [\n");
      for(i=0; i<N; i++)
	{
	  for(j=0; j<NB; j++) 
	    printf("%9.5f+%9.5fi%s",
                     vsip_real_f(vsip_cmget_f(X,i,j)),
                     vsip_imag_f(vsip_cmget_f(X,i,j)),(j == NB-1) ? "":",");
                   (i == N - 1) ? printf("]\n") : printf(";\n");
	}
    }

    vsip_cmalldestroy_f(X);
    vsip_cmalldestroy_f(A);
    } vsip_finalize((void*)0); return 1;
}
Example #7
0
int main(int argc, char *argv[]){vsip_init((void*)0);
{  if(argc < 3){
      printf("usage\nqrdex M N FileName\n");
      exit(1);
   }
   { /* get some data */
     vsip_length M = (vsip_length)atoi(argv[1]),
                 N = (vsip_length)atoi(argv[2]);
     vsip_cmview_f *A = vsip_cmcreate_f(M,N,VSIP_COL,0),
                  *Q = vsip_cmcreate_f(M,N,VSIP_ROW,0);
     vsip_scalar_f *beta = (vsip_scalar_f*)malloc(N * sizeof(vsip_scalar_f));
     
     FILE *fptr = fopen(argv[3],"r");
     VU_cmreadf_f(fptr,A);
     fclose(fptr);
     vsip_cmcopy_f_f(A,Q);
     printf("input matrix A \n");
     printf("A =");VU_cmprintm_f("6.4",A);
     VU_chouseqr_f(Q,beta); /* make a QR matrix, keep the betas */
     printf("Decomposed A with R in upper, \n");
     printf("and householder vector in lower \n");
     printf("householder value on diagonal is 1\n");
     printf("v(2:m)\\R =");VU_cmprintm_f("6.4",Q); 
     { /* Multiply Q times R to see if we get A */
       vsip_length i,j;
       vsip_cmview_f *R = vsip_cmcreate_f(M,N,VSIP_ROW,0);
       vsip_cvview_f *r = vsip_cmrowview_f(R,0);
       vsip_cvputlength_f(r,N * M);
       vsip_cvfill_f(vsip_cmplx_f(0,0),r);
       for(i=0; i<N; i++) /* extract R */
          for(j = i; j<N; j++)
              vsip_cmput_f(R,i,j,vsip_cmget_f(Q,i,j));
       VU_cqprodm_f(R,Q,beta); /* Q * R */
       printf("Multiply Q times R and see if we get A\n");
       printf("QR = \n"); VU_cmprintm_f("6.4",R);
       vsip_cvdestroy_f(r);
       vsip_cmalldestroy_f(R);
     }
     { /* Multiply I * Q to get Q */
       vsip_cmview_f *I = vsip_cmcreate_f(M,M,VSIP_ROW,0);
       vsip_cvview_f *I_rv = vsip_cmrowview_f(I,0);
       vsip_cvputlength_f(I_rv,M * M);
       vsip_cvfill_f(vsip_cmplx_f(0.0,0.0),I_rv);
       vsip_cvputlength_f(I_rv,M);
       vsip_cvputstride_f(I_rv,M+1);
       vsip_cvfill_f(vsip_cmplx_f(1.0,0.0),I_rv);
       printf("Using an Identity matrix extract Q using Householdoer update\n");
       printf("I = \n"); VU_cmprintm_f("6.4",I);
       VU_cqprodm_f(I,Q,beta);
       printf("Q = \n"); VU_cmprintm_f("6.4",I);
       { /* Multiply Q hermitian * A to get R */
         vsip_cmview_f *AC = vsip_cmcreate_f(M,N,VSIP_COL,0);
         vsip_cmview_f *QT = vsip_cmtransview_f(I);
         vsip_cmview_f *R  = vsip_cmcreate_f(M,N,VSIP_ROW,0);
         vsip_cmprodj_f(QT,A,R);
         VU_cmconjIP_f(R);
         printf("Using Q from above mutiply Hermitian(Q) times A to get R\n");
         printf("QT * A = R = \n"); VU_cmprintm_f("6.4",R);
         vsip_cmcopy_f_f(A,AC);
         printf("Using Householder update multiply Transpose(Q) times A to get R\n");
         VU_cqhprodm_f(AC,Q,beta);
         printf("QT * AC = R = \n"); VU_cmprintm_f("6.4",AC);
         { vsip_cmview_f *QTQ = vsip_cmcreate_f(M,M,VSIP_ROW,0);
           vsip_cmprodj_f(QT,I,QTQ);
           printf("QT * Q = I = \n"); VU_cmprintm_f("6.4",QTQ);
           vsip_cmalldestroy_f(QTQ);
         }
         vsip_cmdestroy_f(QT);
         vsip_cmalldestroy_f(R); 
       } 
       {
          /* general Multiply  */
         vsip_cmview_f *J = vsip_cmcreate_f(M,2 * M,VSIP_ROW,0);
         vsip_cmview_f *K = vsip_cmcreate_f(M,2 * M,VSIP_ROW,0);
         vsip_cvview_f *J_rv = vsip_cmrowview_f(J,0);
         vsip_cvputlength_f(J_rv,2 * M * M);
         vsip_cvfill_f(vsip_cmplx_f(2.0,-1.0),J_rv);
         vsip_cvputlength_f(J_rv,M);
         vsip_cvputstride_f(J_rv,2 * M+1);
         vsip_cvfill_f(vsip_cmplx_f(1.0,1.0),J_rv);
         vsip_cvputoffset_f(J_rv,M);
         vsip_cvfill_f(vsip_cmplx_f(3.0,0.0),J_rv);
         printf("Make a big matrix J to test with \n");
         printf("J = \n"); VU_cmprintm_f("6.4",J);

         vsip_cmprod_f(I,J,K);
         VU_cqprodm_f(J,Q,beta);
         printf("Multiply Q * J using Householder update \n");
         printf("J = \n"); VU_cmprintm_f("6.4",J);
         printf("Multiply Q * J using Q extracted above \n");
         printf("K = \n"); VU_cmprintm_f("6.4",K);
         printf("\n");

         {  vsip_cmview_f *JT = vsip_cmtransview_f(J);
            vsip_cmview_f *KT = vsip_cmtransview_f(K);
            VU_cmconjIP_f(JT);
            printf("Conjugate Transpose the current J (overwritten by the above operation\n");
            printf("JT = \n"); VU_cmprintm_f("6.4",JT);
            vsip_cmprod_f(JT,I,KT);
            VU_cmprodq_f(JT,Q,beta);

            printf("Multiply hermitian(J) * Q using Householder update \n");
            printf("JT = \n"); VU_cmprintm_f("6.4",JT);
            printf("Multiply hermitian(J) * Q using Q extracted above \n");
            printf("KT = \n"); VU_cmprintm_f("6.4",KT);
            vsip_cmdestroy_f(JT);
            vsip_cmdestroy_f(KT);
         }
         {  vsip_cmview_f *QT = vsip_cmtransview_f(I);
            VU_cmconjIP_f(QT);
            vsip_cmprod_f(QT,J,K);
            VU_cqhprodm_f(J,Q,beta);
            printf("Transpose JT to J, multiply transpose(Q) * J using Householder\n");
            printf("J = \n"); VU_cmprintm_f("6.4",J);
            printf("Transpose JT to J, multiply transpose(Q) * J using Q extracted above\n");
            printf("K = \n"); VU_cmprintm_f("6.4",K);
            {
               vsip_cmview_f* JT = vsip_cmtransview_f(J);
               vsip_cmview_f* KT = vsip_cmtransview_f(K);
               VU_cmconjIP_f(JT);
               vsip_cmprod_f(JT,QT,KT);
               VU_cmconjIP_f(QT);
               printf("Transpose J, Multiply J * transpose(Q) using Q extracted above\n");
               printf("K = \n"); VU_cmprintm_f("6.4",KT);
               VU_cmprodqh_f(JT,Q,beta);
               VU_cmconjIP_f(JT);
               printf("Transpose J, Multiply J * transpose(Q) using Householder\n");
               printf("J = \n"); VU_cmprintm_f("6.4",JT);
               vsip_cmdestroy_f(JT);
               vsip_cmdestroy_f(KT);
            }
            vsip_cmdestroy_f(QT);
         }
         { vsip_cmview_f *I2 = vsip_cmcreate_f(M,M,VSIP_ROW,0);
           vsip_cmview_f *I2t = vsip_cmtransview_f(I2);
           vsip_cmcopy_f_f(I,I2);                  VU_cmprodqh_f(I2,Q,beta);
           printf("test mprodqh QQh =\n"); VU_cmprintm_f("6.4",I2);
           vsip_cmcopy_f_f(I,I2);VU_cmconjIP_f(I2);VU_cqprodm_f(I2t,Q,beta);
           printf("test qprodm QQh =\n"); VU_cmprintm_f("6.4",I2);
           vsip_cmcopy_f_f(I,I2);                  VU_cqhprodm_f(I2,Q,beta);
           printf("test qhprodm QhQ =\n"); VU_cmprintm_f("6.4",I2);
           vsip_cmcopy_f_f(I,I2);VU_cmconjIP_f(I2);VU_cmprodq_f(I2t,Q,beta);
           printf("test mprodq QhQ =\n"); VU_cmprintm_f("6.4",I2);
           vsip_cmdestroy_f(I2t);
           vsip_cmalldestroy_f(I2);
         }
           
       }
       vsip_cvdestroy_f(I_rv);
       vsip_cmalldestroy_f(I);
     }
     vsip_cmalldestroy_f(A);
     vsip_cmalldestroy_f(Q);
     free(beta);
     } vsip_finalize((void*)0); return 0;
   }
}