今天介绍一个矩阵处理工具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。'表示转置。
结果展示:
3、代码介绍
这两行生成两个二维数组,一个是5行3列,另一个是5行2列,并赋值。
相比c/c++,LAPACK的数据类型申请要加前缀或者后缀,比如lapack_int。
这里主要对后面程序所要用到的数据进行类型定义,然后赋值,类似opencv中定义的数
据类型。
这行代码是本程序的精髓,LAPACK接口函数处理lapack_int类型的数据,设置处理后的
值返回给info。
LAPACK函数名定义的一般形式:LAPACKE_xbase
或者LAPACKE_xbase_work,x表示类型,
s和d分别表示单精度和双精度的实数,c和z分别表示单精度和双精度的复数;base表示
函数,函数的原型在lapack.h中有详细的介绍,大家可以根据自己所要完成的功能寻找
相关的函数。大概有这些函数:
LAPACK_ROW_MAJOR,行优先,即对矩阵的处理的过程中,是按行处理的。
'N',没有进行转置。
m,n,nrhs,m表示两个矩阵的行,n表示x的行,nrhs表示x的列。A*x=B。
*a,lda,分别表示矩阵A的指针和列数。
*b,ldb,分别表示矩阵B的指针和列数。
打印输出,并返回info。
好了大家现在对LAPACK有了初步的认识,假如你想深入学习,请浏览一下网页: