走进LAPACK(一)

一、LAPACK简介

    LAPACK是一个高性能的线性代数计算库,以BLAS(Basic Linear Algebra Subprograms)为基础,用Fortran语言编写,可用于计算诸如求解线性代数方程、线性系统方程组的最小平方解、计算特征值和特征向量等问题。

 

二、下载与编译

1、下载

    可以在LAPACK上找到链接,目前最新的release版本是3.2.1,建议下载带cmake list的压缩包LAPACK with CMAKE,CMAKE可以生成不同编译环境的makefile或者工程。

    当然你也可以通过SVN下载最新的源码(dev版本),Access为

svn co http://icl.cs.utk.edu/svn/lapack-dev/lapack/trunk

2、编译

    Linux下面编译就比较简单,直接make就好,或者仅make blas和make lapack。

    Windows下面推荐使用Cmake生成相应的工程(可以生成MinGW32、Visual Studio、Code::Blocks等的工程或者makefile)。

    使用LAPACK所需的目标库文件是blas.lib、lapack.lib(VS工程)或是libblas.a、liblapack.a(Linux下或MinGW32 makefile)。

 

三、测试

    如果上述编译时,选择了make all或是build all,那么makefile本身就可以自行执行测试程序来确保编译没有出现问题。不过一般为了节省时间,只make blas和make lapack,所以可以编写一个小程序来测试下LAPACK库。

    下面的小程序使用了DGESV函数来求解线性方程组AX=b。

program main
    implicit none
    INTEGER :: N, LDA, LDB
    INTEGER :: NRHS
    INTEGER :: INFO
    INTEGER :: IPIV(4)
    REAL(8) :: A(4,4), B(4,1)
    
    N=4;LDA=4;LDB=4
    NRHS=1
    
    A=reshape((/1.80,2.88,2.05,-0.89,&
                5.25,-2.95,-0.95,-3.80,&
                1.58,-2.69,-2.90,-1.04,&
                -1.11,-0.66,-0.59,0.80/),(/4,4/))
    B=reshape((/9.52,24.35,0.77,-6.22/),(/4,1/))
  
    call DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
    
    write(*,*) "Solution:"
    write(*,'(f8.3)') B
    write(*,*) "INFO=", INFO
    
    stop
end program

    把blas.lib、lapack.lib和该程序一起链接编译。

    输出结果为

        

 

posted on 2010-05-12 20:40  PcX  阅读(14723)  评论(2编辑  收藏  举报

导航