当前位置:   article > 正文

LAPACK的C/C++接口及代码实例_lapack函数库怎么用

lapack函数库怎么用

今天介绍一个矩阵处理工具LAPACK,她有C\C++接口,可在windows下移植。本人最近正在学习,发现还是还不错滴~

本博文分为三部分,第一部分介绍LAPACK的安装,这里只介绍最简单的部署;第二部分介绍LAPACK的运用,举出例子并附上代码,第三部分介绍代码。

1、最简单的安装

http://icl.cs.utk.edu/lapack-for-windows/lapack/LAPACKE_examples.zip下载,里面已经配置好库和坏境,并且有两个例子。假如你想自己编程序,可以修改之前的源文件。当然这种方法有很大的缺陷,就是她的库有限,以后会介绍怎么使用VS和Cmake编译LAPACK,这里只让大伙有个简单的认识。

2、代码实例

我们举个最小二乘的例子。A*x=B,由A和B求解出x,一般是超定方程组的解。

求解思路:A'Ax=A'B >> X=(A'A)'A'B。'表示转置。

/* Calling DGELS using row-major order */

#include 
    
    
     
     
#include 
     
     
      
      

int main (int argc, const char * argv[])
{
   double a[5][3] = {1,1,1,2,3,4,3,5,2,4,2,5,5,4,3};
   double b[5][2] = {-10,-3,12,14,14,12,16,16,18,16};
   lapack_int info,m,n,lda,ldb,nrhs;
   int i,j;

   m = 5;
   n = 3;
   nrhs = 2;
   lda = 3;
   ldb = 2;

   info = LAPACKE_dgels(LAPACK_ROW_MAJOR,'N',m,n,nrhs,*a,lda,*b,ldb);

   for(i=0;i
      
      
     
     
    
    
结果展示:


3、代码介绍

  1. double a[5][3] = {1,1,1,2,3,4,3,5,2,4,2,5,5,4,3};
  2. double b[5][2] = {-10,-3,12,14,14,12,16,16,18,16};

这两行生成两个二维数组,一个是5行3列,另一个是5行2列,并赋值。

  1. lapack_int info,m,n,lda,ldb,nrhs;
  2. int i,j;
  3. m = 5;
  4. n = 3;
  5. nrhs = 2;
  6. lda = 3;
  7. ldb = 2;

相比c/c++,LAPACK的数据类型申请要加前缀或者后缀,比如lapack_int。

这里主要对后面程序所要用到的数据进行类型定义,然后赋值,类似opencv中定义的数

据类型。

info = LAPACKE_dgels(LAPACK_ROW_MAJOR,'N',m,n,nrhs,*a,lda,*b,ldb);

这行代码是本程序的精髓,LAPACK接口函数处理lapack_int类型的数据,设置处理后的

返回给info。

LAPACK函数名定义的一般形式:LAPACKE_xbase 或者LAPACKE_xbase_work,x表示类型,

s和d分别表示单精度和双精度的实数,c和z分别表示单精度和双精度的复数;base表示

函数,函数的原型在lapack.h中有详细的介绍,大家可以根据自己所要完成的功能寻找

相关的函数。大概有这些函数:

  1. //real function
  2. bdsdc bdsqr disna gbbrd gbcon gbequ gbequb gbrfs gbrfsx gbsv gbsvx gbsvxx gbtrf
  3. gbtrs gebak gebal gebrd gecon geequ geequb gees geesx geev geevx gehrd gejsv
  4. gelqf gels gelsd gelss gelsy geqlf geqp3 geqpf geqrf geqrfp gerfs gerfsx gerqf
  5. gesdd gesv gesvd gesvj gesvx gesvxx getrf getri getrs ggbak ggbal gges ggesx
  6. ggev ggevx ggglm gghrd gglse ggqrf ggrqf ggsvd ggsvp gtcon gtrfs gtsv gtsvx
  7. gttrf gttrs hgeqz hsein hseqr opgtr opmtr orgbr orghr orglq orgql orgqr orgrq
  8. orgtr ormbr ormhr ormlq ormql ormqr ormrq ormrz ormtr pbcon pbequ pbrfs pbstf
  9. pbsv pbsvx pbtrf pbtrs pftrf pftri pftrs pocon poequ poequb porfs porfsx posv
  10. posvx posvxx potrf potri potrs ppcon ppequ pprfs ppsv ppsvx pptrf pptri pptrs
  11. pstrf ptcon pteqr ptrfs ptsv ptsvx pttrf pttrs sbev sbevd sbevx sbgst sbgv
  12. sbgvd sbgvx sbtrd sfrk spcon spev spevd spevx spgst spgv spgvd spgvx sprfs spsv
  13. spsvx sptrd sptrf sptri sptrs stebz stedc stegr stein stemr steqr sterf stev
  14. stevd stevr stevx sycon syequb syev syevd syevr syevx sygst sygv sygvd sygvx
  15. syrfs syrfsx sysv sysvx sysvxx sytrd sytrf sytri sytrs tbcon tbrfs tbtrs tfsm
  16. tftri tfttp tfttr tgevc tgexc tgsen tgsja tgsna tgsyl tpcon tprfs tptri tptrs
  17. tpttf tpttr trcon trevc trexc trrfs trsen trsna trsyl trtri trtrs trttf trttp
  18. tzrzf
  19. //complex function
  20. bdsqr gbbrd gbcon gbequ gbequb gbrfs gbrfsx gbsv gbsvx gbsvxx gbtrf gbtrs gebak
  21. gebal gebrd gecon geequ geequb gees geesx geev geevx gehrd gelqf gels gelsd
  22. gelss gelsy geqlf geqp3 geqpf geqrf geqrfp gerfs gerfsx gerqf gesdd gesv gesvd
  23. gesvx gesvxx getrf getri getrs ggbak ggbal gges ggesx ggev ggevx ggglm gghrd
  24. gglse ggqrf ggrqf ggsvd ggsvp gtcon gtrfs gtsv gtsvx gttrf gttrs hbev hbevd
  25. hbevx hbgst hbgv hbgvd hbgvx hbtrd hecon heequb heev heevd heevr heevx hegst
  26. hegv hegvd hegvx herfs herfsx hesv hesvx hesvxx hetrd hetrf hetri hetrs hfrk
  27. hgeqz hpcon hpev hpevd hpevx hpgst hpgv hpgvd hpgvx hprfs hpsv hpsvx hptrd
  28. hptrf hptri hptrs hsein hseqr pbcon pbequ pbrfs pbstf pbsv pbsvx pbtrf pbtrs
  29. pftrf pftri pftrs pocon poequ poequb porfs porfsx posv posvx posvxx potrf potri
  30. potrs ppcon ppequ pprfs ppsv ppsvx pptrf pptri pptrs pstrf ptcon pteqr ptrfs
  31. ptsv ptsvx pttrf pttrs spcon sprfs spsv spsvx sptrf sptri sptrs stedc stegr
  32. stein stemr steqr sycon syequb syrfs syrfsx sysv sysvx sysvxx sytrf sytri sytrs
  33. tbcon tbrfs tbtrs tfsm tftri tfttp tfttr tgevc tgexc tgsen tgsja tgsna tgsyl
  34. tpcon tprfs tptri tptrs tpttf tpttr trcon trevc trexc trrfs trsen trsna trsyl
  35. trtri trtrs trttf trttp tzrzf ungbr unghr unglq ungql ungqr ungrq ungtr unmbr
  36. unmhr unmlq unmql unmqr unmrq unmrz unmtr upgtr upmtr

LAPACK_ROW_MAJOR,行优先,即对矩阵的处理的过程中,是按行处理的。

'N',没有进行转置。

m,n,nrhs,m表示两个矩阵的行,n表示x的行,nrhs表示x的列。A*x=B。

*a,lda,分别表示矩阵A的指针和列数。

*b,ldb,分别表示矩阵B的指针和列数。

  1. for(i=0;i
打印输出,并返回info。


好了大家现在对LAPACK有了初步的认识,假如你想深入学习,请浏览一下网页:

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

http://icl.cs.utk.edu/lapack-for-windows/lapack/


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/245534
推荐阅读
相关标签
  

闽ICP备14008679号