主要内容

将单独的复数传递给Fortran函数

MATLAB®用与Fortran相同的方式存储复数,在一个向量中,巴勒斯坦权力机构,实部和虚部交叉。

在MATLAB版本9.4 (R2018a)之前,MATLAB以不同于Fortran的方式存储复数,以独立的、等长的向量存储公关π。因此,在这些版本的MATLAB和Fortran函数之间交换的复变量是不兼容的。MATLAB提供的转换例程mat2fortfort2mat改变复数的存储格式来解决这种不兼容性。的fort.h头文件定义mat2fortfort2mat功能。源代码在fort.c文件。

  • mat2fort-将MATLAB分离复杂矩阵转换为Fortran复杂存储。

  • fort2mat-转换Fortran复杂存储到MATLAB分离实部和虚部。

使用这些例程:

  1. 包括fort.h在源文件的头文件中使用语句# include“fort.h”

  2. 连接fort.c文件与您的程序。指定完整路径,matlabroot走读生/ / refbook例子fort.c在build命令中。

  3. 要指示头文件,请使用-我路径名开关。指定完整路径,matlabroot走读生/ / refbook例子fort.h在build命令中。

  4. 当您指定完整路径时,请替换术语matlabroot使用实际的文件夹名。

  5. 使用墨西哥人-R2017b选择。

处理复数输入值

对于使用复数输入值的函数,没有必要复制实参。的mat2fort转换例程为您创建参数的副本。信息,请参阅保持输入值不被修改

处理复数输出参数

对于Fortran函数返回的复杂变量,执行以下操作:

  1. 当为变量分配存储空间时,为实际变量分配的空间是相同大小变量的两倍。这样做是因为返回的变量使用Fortran格式,它占用了两倍的空间。见分配zout在这个例子中。

  2. 为使该变量与MATLAB兼容,使用MATLABfort2mat函数。

〇通过复杂变量matrixDivideComplex

这个例子展示了如何调用一个函数,传递复杂函数prhs [0]作为输入和接收的综合体plhs [0]作为输出。临时变量zout包含Fortran格式的输入和输出值。要查看示例,请打开matrixDivideComplex.c在MATLAB编辑器中。要创建MEX文件,请将源文件复制到一个可写文件夹。

拷贝文件(fullfile (matlabroot,“外来的”“例子”“refbook”“matrixDivideComplex.c”),“。”

创建变量,定位fort.c文件及其头文件。

fortfile = fullfile (matlabroot,“外来的”“例子”“refbook”“fort.c”);fortheaderdir = fullfile (matlabroot,“外来的”“例子”“refbook”);

构建MEX函数。

墨西哥人(“v”“-R2017b”,[“我”fortheaderdir),“matrixDivideComplex.c”fortfile,“-lmwlapack”

测试功能。

Areal = [1 2;3 4];Aimag = [1 1;0 0];Breal = [5;6);双磁芯= [0;0);复杂=复杂(面积、省里);Bcomplex =复杂(Breal、双磁芯); X = matrixDivideComplex(Acomplex,Bcomplex)
X = -4.4000 + 0.8000i

处理Fortran复杂返回类型dotProductComplex

一些1级BLAS函数(例如,zdotuzdotc)返回一个双复杂类型,C语言不支持。金宝app下面的C MEX文件,dotProductComplex.c,演示如何处理函数的Fortran复杂返回类型zdotu。要查看示例,请打开dotProductComplex.c在MATLAB编辑器中。

C程序调用在输出参数中返回值的Fortran函数时,其调用语法与平台有关。在窗户上®Mac平台,将返回值作为第一个输入参数传递。MATLAB提供一个宏,FORTRAN_COMPLEX_FUNCTIONS_RETURN_VOID来处理这些差异。

dotProductComplex示例计算点积X两个复向量的每个元素一个B。调用语法是:

X = dotProductComplex (A, B)

在哪里一个B复向量的大小是否相同X是复标量。

例如,构建:

拷贝文件(fullfile (matlabroot,“外来的”“例子”“refbook”“dotProductComplex.c”),“。”) forfile = fullfile(matlabroot,“外来的”“例子”“refbook”“fort.c”);fortheaderdir = fullfile (matlabroot,“外来的”“例子”“refbook”);墨西哥人(“v”“-R2017b”,[“我”fortheaderdir),“dotProductComplex.c”fortfile,“-lmwblas”

测试类型;

a1 =(1 + 2我;2 + 3);b1 =(1 + 2我;1 + 3];X = dotProductComplex (a1, b1)
X = -16.0000 + 3.0000i

基于LAPACK -的对称不定因子分解utdu_slv

这个例子utdu_slv.c调用LAPACK函数zhesvxdsysvx。要查看示例,请打开utdu_slv.c在MATLAB编辑器中。要创建MEX文件,请将源文件复制到一个可写文件夹。

拷贝文件(fullfile (matlabroot,“外来的”“例子”“refbook”“utdu_slv.c”),“。”

构建:

fortheaderdir = fullfile (matlabroot,“外来的”“例子”“refbook”);墨西哥人(“v”“-R2017b”,[“我”fortheaderdir),“utdu_slv.c”fortfile,“-lmwlapack”