主要内容

叫LAPACK和布拉斯特区功能

你可以叫一个LAPACK bla函数使用一个墨西哥人或文件。创建一个墨西哥人文件,你需要C / c++和Fortran编程经验和软件资源(编译器和链接器)来构建一个可执行文件。它还有助于理解如何使用Fortran子例程。MATLAB®提供了mwlapackmwblas图书馆matlabroot/外面的自由。为了帮助您开始,有源代码示例matlabroot走读生/ / refbook例子

叫LAPACK或布拉斯特区功能:

  1. 创建一个源文件包含墨西哥人mexFunction网关程序。

  2. 确保你有一个支持的平台上的编译器。金宝app最新支持的编译器列表,请参阅金宝app金宝app支持和兼容的编译器

  3. 建立一个二进制文件使用墨西哥人墨西哥人命令和单独的复杂构建的旗帜-R2017b

    • 您的源文件链接到一个或两个库,mwlapackmwblas

    • mwlapackmwblas图书馆只支持64位的整数矩阵维金宝app度。不使用-compatibleArrayDims选择。

    • 建立一个墨西哥人文件函数,使用复数,明白了通过单独的复数Fortran功能

  4. 布拉斯特区或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

外部网站