⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_sblas2.c

📁 基本的C语言线性代数函数库,在linux下可直接编译;在windows下要显示地申明包含
💻 C
📖 第 1 页 / 共 2 页
字号:
           A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ];        }        i=*k;        irow=*k-i;        for( j=0; j<*n; j++ )           A[ LDA*j+irow ]=a[ (*lda)*j+i ];     }     else {        i=0;        irow=*k-i;        for( j=0; j<*n; j++ )           A[ LDA*j+irow ]=a[ (*lda)*j+i ];        for( i=1; i<*k+1; i++ ){           irow=*k-i;           jcol=i;           for( j=jcol; j<(*n+*k); j++ )              A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ];        }     }     cblas_stbsv(CblasRowMajor, uplo, trans, diag, *n, *k, A, LDA, x, *incx);     free(A);  }  else     cblas_stbsv(CblasColMajor, uplo, trans, diag, *n, *k, a, *lda, x, *incx);}void F77_ssbmv(int *order, char *uplow, int *n, int *k, float *alpha,	      float *a, int *lda, float *x, int *incx, float *beta, 	      float *y, int *incy) {  float *A;  int i,j,irow,jcol,LDA;  enum CBLAS_UPLO uplo;  get_uplo_type(uplow,&uplo);  if (*order == TEST_ROW_MJR) {     LDA = *k+1;     A   = ( float* )malloc( (*n+*k)*LDA*sizeof( float ) );     if (uplo == CblasUpper) {        for( i=0; i<*k; i++ ){           irow=*k-i;           jcol=(*k)-i;           for( j=jcol; j<*n; j++ )        A[ LDA*(j-jcol)+irow ]=a[ (*lda)*j+i ];        }        i=*k;        irow=*k-i;        for( j=0; j<*n; j++ )           A[ LDA*j+irow ]=a[ (*lda)*j+i ];     }     else {        i=0;        irow=*k-i;        for( j=0; j<*n; j++ )           A[ LDA*j+irow ]=a[ (*lda)*j+i ];        for( i=1; i<*k+1; i++ ){           irow=*k-i;           jcol=i;           for( j=jcol; j<(*n+*k); j++ )              A[ LDA*j+irow ]=a[ (*lda)*(j-jcol)+i ];        }     }     cblas_ssbmv(CblasRowMajor, uplo, *n, *k, *alpha, A, LDA, x, *incx,		 *beta, y, *incy );     free(A);   }   else     cblas_ssbmv(CblasColMajor, uplo, *n, *k, *alpha, a, *lda, x, *incx,		 *beta, y, *incy );}void F77_sspmv(int *order, char *uplow, int *n, float *alpha, float *ap,	      float *x, int *incx, float *beta, float *y, int *incy) {  float *A,*AP;  int i,j,k,LDA;  enum CBLAS_UPLO uplo;  get_uplo_type(uplow,&uplo);  if (*order == TEST_ROW_MJR) {     LDA = *n;     A   = ( float* )malloc( LDA*LDA*sizeof( float ) );     AP  = ( float* )malloc( (((LDA+1)*LDA)/2)*sizeof( float ) );     if (uplo == CblasUpper) {        for( j=0, k=0; j<*n; j++ )           for( i=0; i<j+1; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=i; j<*n; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     else {        for( j=0, k=0; j<*n; j++ )           for( i=j; i<*n; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=0; j<i+1; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     cblas_sspmv( CblasRowMajor, uplo, *n, *alpha, AP, x, *incx, *beta, y, 		  *incy );     free(A); free(AP);  }  else     cblas_sspmv( CblasColMajor, uplo, *n, *alpha, ap, x, *incx, *beta, y, 		  *incy );}void F77_stpmv(int *order, char *uplow, char *transp, char *diagn,	      int *n, float *ap, float *x, int *incx) {  float *A, *AP;  int i, j, k, LDA;  enum CBLAS_TRANSPOSE trans;  enum CBLAS_UPLO uplo;  enum CBLAS_DIAG diag;  get_transpose_type(transp,&trans);   get_uplo_type(uplow,&uplo);   get_diag_type(diagn,&diag);   if (*order == TEST_ROW_MJR) {     LDA = *n;     A   = ( float* )malloc( LDA*LDA*sizeof( float ) );     AP  = ( float* )malloc( (((LDA+1)*LDA)/2)*sizeof( float ) );     if (uplo == CblasUpper) {        for( j=0, k=0; j<*n; j++ )           for( i=0; i<j+1; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=i; j<*n; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     else {        for( j=0, k=0; j<*n; j++ )           for( i=j; i<*n; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=0; j<i+1; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     cblas_stpmv( CblasRowMajor, uplo, trans, diag, *n, AP, x, *incx );     free(A); free(AP);  }  else     cblas_stpmv( CblasColMajor, uplo, trans, diag, *n, ap, x, *incx );}void F77_stpsv(int *order, char *uplow, char *transp, char *diagn,	      int *n, float *ap, float *x, int *incx) {  float *A, *AP;  int i, j, k, LDA;  enum CBLAS_TRANSPOSE trans;  enum CBLAS_UPLO uplo;  enum CBLAS_DIAG diag;  get_transpose_type(transp,&trans);   get_uplo_type(uplow,&uplo);   get_diag_type(diagn,&diag);   if (*order == TEST_ROW_MJR) {     LDA = *n;     A   = ( float* )malloc( LDA*LDA*sizeof( float ) );     AP  = ( float* )malloc( (((LDA+1)*LDA)/2)*sizeof( float ) );     if (uplo == CblasUpper) {        for( j=0, k=0; j<*n; j++ )           for( i=0; i<j+1; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=i; j<*n; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     else {        for( j=0, k=0; j<*n; j++ )           for( i=j; i<*n; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=0; j<i+1; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     cblas_stpsv( CblasRowMajor, uplo, trans, diag, *n, AP, x, *incx );     free(A); free(AP);  }  else     cblas_stpsv( CblasColMajor, uplo, trans, diag, *n, ap, x, *incx );}void F77_sspr(int *order, char *uplow, int *n, float *alpha, float *x, 	     int *incx, float *ap ){  float *A, *AP;  int i,j,k,LDA;  enum CBLAS_UPLO uplo;  get_uplo_type(uplow,&uplo);  if (*order == TEST_ROW_MJR) {     LDA = *n;     A   = ( float* )malloc( LDA*LDA*sizeof( float ) );     AP  = ( float* )malloc( (((LDA+1)*LDA)/2)*sizeof( float ) );     if (uplo == CblasUpper) {        for( j=0, k=0; j<*n; j++ )           for( i=0; i<j+1; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=i; j<*n; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     else {        for( j=0, k=0; j<*n; j++ )           for( i=j; i<*n; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=0; j<i+1; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     cblas_sspr( CblasRowMajor, uplo, *n, *alpha, x, *incx, AP );     if (uplo == CblasUpper) {        for( i=0, k=0; i<*n; i++ )           for( j=i; j<*n; j++, k++ )              A[ LDA*i+j ]=AP[ k ];        for( j=0, k=0; j<*n; j++ )           for( i=0; i<j+1; i++, k++ )              ap[ k ]=A[ LDA*i+j ];     }     else {        for( i=0, k=0; i<*n; i++ )           for( j=0; j<i+1; j++, k++ )              A[ LDA*i+j ]=AP[ k ];        for( j=0, k=0; j<*n; j++ )           for( i=j; i<*n; i++, k++ )              ap[ k ]=A[ LDA*i+j ];     }     free(A); free(AP);  }  else     cblas_sspr( CblasColMajor, uplo, *n, *alpha, x, *incx, ap );}void F77_sspr2(int *order, char *uplow, int *n, float *alpha, float *x, 	     int *incx, float *y, int *incy, float *ap ){  float *A, *AP;  int i,j,k,LDA;  enum CBLAS_UPLO uplo;  get_uplo_type(uplow,&uplo);  if (*order == TEST_ROW_MJR) {     LDA = *n;     A   = ( float* )malloc( LDA*LDA*sizeof( float ) );     AP  = ( float* )malloc( (((LDA+1)*LDA)/2)*sizeof( float ) );     if (uplo == CblasUpper) {        for( j=0, k=0; j<*n; j++ )           for( i=0; i<j+1; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=i; j<*n; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     else {        for( j=0, k=0; j<*n; j++ )           for( i=j; i<*n; i++, k++ )              A[ LDA*i+j ]=ap[ k ];        for( i=0, k=0; i<*n; i++ )           for( j=0; j<i+1; j++, k++ )              AP[ k ]=A[ LDA*i+j ];     }     cblas_sspr2( CblasRowMajor, uplo, *n, *alpha, x, *incx, y, *incy, AP );     if (uplo == CblasUpper) {        for( i=0, k=0; i<*n; i++ )           for( j=i; j<*n; j++, k++ )              A[ LDA*i+j ]=AP[ k ];        for( j=0, k=0; j<*n; j++ )           for( i=0; i<j+1; i++, k++ )              ap[ k ]=A[ LDA*i+j ];     }     else {        for( i=0, k=0; i<*n; i++ )           for( j=0; j<i+1; j++, k++ )              A[ LDA*i+j ]=AP[ k ];        for( j=0, k=0; j<*n; j++ )           for( i=j; i<*n; i++, k++ )              ap[ k ]=A[ LDA*i+j ];     }     free(A);     free(AP);  }  else     cblas_sspr2( CblasColMajor, uplo, *n, *alpha, x, *incx, y, *incy, ap );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -