叫LAPACK和布拉斯特区功能
你可以叫一个LAPACK bla函数使用一个墨西哥人或文件。创建一个墨西哥人文件,你需要C / c++和Fortran编程经验和软件资源(编译器和链接器)来构建一个可执行文件。它还有助于理解如何使用Fortran子例程。MATLAB®提供了mwlapack
和mwblas
图书馆matlabroot
/外面的自由
。为了帮助您开始,有源代码示例matlabroot
走读生/ / refbook例子
。
叫LAPACK或布拉斯特区功能:
创建一个源文件包含墨西哥人
mexFunction
网关程序。确保你有一个支持的平台上的编译器。金宝app最新支持的编译器列表,请参阅金宝app金宝app支持和兼容的编译器。
建立一个二进制文件使用墨西哥人
墨西哥人
命令和单独的复杂构建的旗帜-R2017b
。您的源文件链接到一个或两个库,
mwlapack
和mwblas
。的
mwlapack
和mwblas
图书馆只支持64位的整数矩阵维金宝app度。不使用-compatibleArrayDims
选择。建立一个墨西哥人文件函数,使用复数,明白了通过单独的复数Fortran功能。
布拉斯特区或LAPACK功能信息,请参阅https://www.netlib.org/blas/或https://www.netlib.org/lapack/。
构建matrixMultiply
墨西哥人使用布拉斯特区函数的函数
这个例子展示了如何构建墨西哥人文件示例matrixMultiply.c
从布拉斯特区库,它使用功能。使用这个文件,将其复制到一个本地文件夹。例如:
拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“refbook”,“matrixMultiply.c”),“。”)
示例文件是只读文件。修改一个例子,确保文件是可写的输入:
fileattrib (“matrixMultiply.c”,' + w ')
墨西哥人文件,类型:
墨西哥人- v-R2017bmatrixMultiply.c-lmwblas
墨西哥人文件运行,类型:
一个= [1 3 5;2 4 7];B = [5 8 11;3 9 21;4 0 8];X = matrixMultiply (A, B)
X = 24 35 114 162 52
保存输入值的修改
许多LAPACK和布拉斯特区功能修改参数的值传递给他们。好的做法是复制参数可以修改之前通过这些函数。对MATLAB如何处理参数的信息mexFunction
,请参阅管理输入和输出参数。
matrixDivide
例子
这个例子中调用LAPACK函数dgesv
修改它的输入参数。这个例子中的代码复制的prhs [0]
和prhs [1]
,并将副本传递到dgesv
保存的内容输入参数。
看到这个例子中,开放matrixDivide.c
在MATLAB编辑器。创建墨西哥人文件,复制源文件可写的文件夹。
拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“refbook”,“matrixDivide.c”),“。”)
构建文件,类型:
墨西哥人- v-R2017bmatrixDivide.c-lmwlapack
测试类型:
= (1 - 2;3 4];B = [5;6);X = matrixDivide (A, B)
X = -4.0000 - 4.5000
Fortran函数传递参数从C / c++程序
LAPACK和布拉斯特区函数是用Fortran编写的。C / c++和Fortran语言使用不同的约定与函数传递参数。Fortran函数传递参数通过引用,而C / c++函数传递参数的值。按值传递时,传递一份价值。通过引用时,您传递一个指针的值。一个参考也是值的地址。
当你调用Fortran子例程,就像一个函数从LAPACK bla,或从一个C / c++程序,一定要按引用传递参数。经过参考,之前的观点与一个& (&
),除非这一观点已经是一个参考。例如,当您创建一个矩阵使用mxGetDoubles
功能,您将创建一个引用矩阵和不需要之前的&参数。
下面的代码片段中,变量米
,n
,p
,一个
,零
需要&
让他们参考。变量一个
,B
,C
,中文
是指针,引用。
/ *指向输入和输出矩阵* /双*,* B, C *;/ * * /矩阵维度mwSignedIndex m, n, p;/ *其他输入dgemm * / char *中文=“N”;双1 = 1.0,0 = 0.0;/ *调用布拉斯特区函数* / dgemm(中文、中文、a&m, n,代替,一个,一个,a&m, B,拟定,零,C, a&m);
matrixMultiply
例子
的matrixMultiply.c
示例调用dgemm
,以引用的方式传递所有参数。查看源代码,开放matrixMultiply.c
在MATLAB编辑器。构建和运行这个例子,请参阅构建matrixMultiply墨西哥人使用布拉斯特区函数的函数。
从Fortran程序Fortran函数传递参数
你可以叫LAPACK从Fortran墨西哥人文件和布拉斯特区功能。下面的例子将两个矩阵和繁殖bla程序通过调用dgemm
。要运行示例,将代码复制到编辑器和名称的文件calldgemm.F
。
# include“fintrf。h”子例程mexFunction (nlhs、plhs nrhs, prhs) mwPointer plhs (*), prhs(*)整数nlhs nrhs mwPointer mxcreatedoublematrix mwPointer mxgetpr mwPointer A, B, C mwSize mxgetm, mxgetn mwSignedIndex m, n, p mwSize元素个数双精度,零,ar, br字符ch1 ch2 ch1 = ' n ' ch2 = ' n ' 1 = 1.0 0 = 0.0 = mxgetpr (prhs (1) B = mxgetpr (prhs (2) m = mxgetm (prhs (1) p = mxgetn (prhs (1) n = mxgetn (prhs (2) plhs (1) = mxcreatedoublematrix (0.0 m, n) C = mxgetpr (plhs(1)元素个数= 1叫mxcopyptrtoreal8 (ar,元素个数)调用mxcopyptrtoreal8 (B, br元素个数)调用dgemm (ch2 ch1, m, n, p,, %瓦尔(A), m + %瓦尔(B), p,零,%瓦尔(C), m)返回
BLAS链接库,它包含了dgemm
函数。
墨西哥人- v-R2017bcalldgemm.F-lmwblas
修改函数名UNIX系统
函数名后添加下划线字符当调用LAPACK UNIX或布拉斯特区功能®系统。例如,电话dgemm
使用:
dgemm_ (__arg1、最长,……,argn);
或将这些行添加到源代码:
#如果! (_WIN32) # define定义dgemm dgemm_ # endif