lapacke svd实例

参考

intel MTK实例

https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/lapacke_dgesvd_row.c.htm  

http://www.netlib.org/lapack/explore-html/d0/dee/lapacke__dgesvd_8c.html

https://blog.csdn.net/helei001/article/details/18447001

查询函数

http://www.netlib.org/lapack/explore-html/de/ddd/lapacke_8h_source.html  

c接口

http://www.netlib.org/lapack/lapacke.html

原理

http://www.netlib.org/lapack/lug/node53.html

#include <stdio.h>
#include <lapacke.h>
 

void print_matrix(double *src, int m, int n)
{
   for(int i =0 ;i < m; ++i)
   {
      for(int j = 0; j < n;++j)
      {
         printf("%lf ", src[i * n + j] );
      }
      printf("\n" );
   }
   printf("\n" );
}

int main (int argc, const char * argv[])
{
   double a[2*2] = {4.0,4.0,-3.0,3.0};
   int matrix_layout = LAPACK_ROW_MAJOR;
   char jobz = 'N';
   lapack_int info,m,n,lda,ldu,ldvt;
   m = 2;
   n = 2;
   lda = 2;
   ldu = 2;
   ldvt = 2;
   double s[4];
   double u[4];
   double vt[4];
   double superb[4];
   // lapack_int   LAPACKE_dgesvd (int matrix_layout, char jobu, char jobvt, 
   //  lapack_int m, lapack_int n, double *a, lapack_int lda, 
   //  double *s, double *u, lapack_int ldu, double *vt,
   //   lapack_int ldvt, double *superb)
   info =  LAPACKE_dgesvd( matrix_layout, 'A', 'A', m,
                            n, a, lda, s,
                            u, ldu, vt,
                            ldvt, superb);

   printf("%d\n",info);
   print_matrix(s,2,2);
   print_matrix(u,2,2);
   print_matrix(vt,2,2);
   return 0;

}

 

$ gfortran main.c -llapacke -llapack -lrefblas && ./a.out
0
5.656854 4.242641
0.000000 0.000000

-1.000000 0.000000
0.000000 1.000000

-0.707107 -0.707107
-0.707107 0.707107

posted on 2018-07-11 20:00  Maddock  阅读(480)  评论(0编辑  收藏  举报

导航