- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CLAPACK的安装与使用,clapack安装,clapack3与vc6.0,clapack,clapack矩阵乘法,clapackmac,clapack3,clapackf2c.h,git的安装与使用,pktgen的安装与使用
CLAPACK的安装与简单使用
烤鱼片
cleverysm@
CLAPACK是LAPACK的C语言接口。LAPACK的全称是Linear Algebra PACKage,是非常著名的线性代数库。LAPACK是用Fortran写的,为了方便C/C++程序的使用,就有了LAPACK的C接口库CLAPACK。LAPACK的主页是/lapack/,CLAPACK则在/clapack/。
安装CLAPACK首先自从其主页上下载CLAPACK包/clapack/clapack.tgz,解压。在其目录下的INSTALL目录中有make.inc的范本文件,比如在linux下就是make.inc.LINUX,将这个文件拷到CLAPACK目录下并改名为make.inc,并修改此文件中的相应参数,如果需要的话。CLAPACK需要F2CLIBS的libI77.a和libF77.a,一个tmglib和blas,这几个库都包含在了CLAPACK的安装包中,但是blas可以选用其他优化过的版本以得到更好的性能。在此我们使用CLAPACK中的blas。
首先编译F2CLIBS,用于将fortran转换为c语言,在CLAPACK目录下,make f2clib,在
CLAPACK/F2CLIBS下就会生成libI77.a和libF77.a。
编译tmglib, 在CLAPACK目录下,make tmglib,会生成CLAPACK/tmglib_LINUX.a。
编译blas, 在CLAPACK目录下,make blaslib,会生成CLAPACK/blas_LINUX.a。
最后是编译CLAPACK,make,会生成CLAPACK/lapack_LINUX.a
CLAPACK下的clapack.h就是所需要的头文件,除此之外还需要的一个头文件是F2CLIBS/f2c.h。
现在就通过使用CLAPACK中的一个函数sgesv_解线性方程组来学习一下使用的方法。
包括此函数在内的所有函数可以在CLAPACK/SRC下找到源代码,并在代码中有函数参数的说明信息。sgesv_的代码文件就是sgesv.c。
int sgesv_(integer *n, integer *nrhs, real *a, integer *lda, integer *ipiv, real *b, integer *ldb, integer *info)
sgesv_的功能是使用LU分解法解线性方程组AX=B,其中A是一个n*n的方阵。
integer *n, 方程的个数,也就是A的行数和列数
integer *nrhs, B的列数
real *a, 存储矩阵A数据的一维数组,在fortran中,数组是列主序存储,在此a中的二维数据也必须是列主序
integer *lda, 等于n
integer *ipiv, 一个输出数据数组,数组大小是n,具体什么功能不太明白,但是似乎不影响最后结果,谁明白请告诉我
real *b,存储矩阵B数据的一维数组,在fortran中,数组是列主序存储,在此b中的二维数据也必须是列主序
integer *ldb, 等于n
integer *info,输出参数,如果返回此参数为0,表示函数正常退出,否则表示出错
在此,我用了高教同济大学版线性代数第二版106页,2题(1)的数据。
A:
4,2,-1
3,-1,2
11,0,3
B:
2
10
8
代码:
#include iostream
using namespace std;
#include F2CLIBS/f2c.h
//因为程序是C++,而CLAPACK是C语言写的,所以在此处用extern关键字
extern C
{
#include clapack.h
}
int main(void) {
integer M=3 ;
integer N=1;
real a[9]={4,3,11,2,-1,0,-1,2,3};
real b[3]={2,10,8};
integer lda;
integer ldb;
integer INFO;
lda=M;
ldb=M;
integer ipiv[M];
sgesv_(M, N, a, lda,ipiv, b, ldb, INFO);
if(INFO==0)
{
for(int i=0;iM;i++)
{
coutb[i]endl;
}
}
else
{
coutFailed.endl;
}
return EXIT_SUCCESS;
}
程序编译链接的时候,lapack_LINUX.a,tmglib_LINUX.a,blas_LINUX.a,libF77.a,lib
文档评论(0)