CLAPACK简单使用

 CLAPACKLAPACKC语言接口。LAPACK的全称是Linear Algebra PACKage,是非常著名的线性代数库。LAPACK是用Fortran写的,为了方便C/C++程序的使用,就有了LAPACKC接口库CLAPACKLAPACK的主页是http://www.netlib.org/lapack/CLAPACK则在http://www.netlib.org/clapack/

 

 安装CLAPACK首先自从其主页上下载CLAPACK  http://www.netlib.org/clapack/CLAPACK-3.1.1-VisualStudio.zip  ,编译。

 

现在就通过使用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,表示函数正常退出,否则表示出错

#include <iostream> using namespace std; #include <clapack/f2c.h> //因为程序是C++,而CLAPACK是C语言写的,所以在此处用extern关键字 extern "C" { #include <clapack/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[3]; sgesv_(&M, &N, a, &lda,ipiv, b, &ldb, &INFO); if(INFO==0) { for(int i=0;i<M;i++) { cout<<b[i]<<endl; } } else { cout<<"Failed."<<endl; } return EXIT_SUCCESS; }

你可能感兴趣的:(c,Integer,存储,语言,fortran)