MATLAB®用与Fortran相同的方式存储复数,在一个向量中,巴勒斯坦权力机构
,实部和虚部交叉。
在MATLAB版本9.4 (R2018a)之前,MATLAB以不同于Fortran的方式存储复数,以独立的、等长的向量存储公关
和π
。因此,在这些版本的MATLAB和Fortran函数之间交换的复变量是不兼容的。MATLAB提供的转换例程mat2fort
和fort2mat
改变复数的存储格式来解决这种不兼容性。的fort.h
头文件定义mat2fort
和fort2mat
功能。源代码在fort.c
文件。
mat2fort
-将MATLAB分离复杂矩阵转换为Fortran复杂存储。
fort2mat
-转换Fortran复杂存储到MATLAB分离实部和虚部。
使用这些例程:
包括fort.h
在源文件的头文件中使用语句# include“fort.h”
。
连接fort.c
文件与您的程序。指定完整路径,matlabroot
走读生/ / refbook例子
为fort.c
在build命令中。
要指示头文件,请使用-我
开关。指定完整路径,路径名
matlabroot
走读生/ / refbook例子
为fort.h
在build命令中。
当您指定完整路径时,请替换术语matlabroot
使用实际的文件夹名。
使用墨西哥人
-R2017b
选择。
对于使用复数输入值的函数,没有必要复制实参。的mat2fort
转换例程为您创建参数的副本。信息,请参阅保持输入值不被修改。
对于Fortran函数返回的复杂变量,执行以下操作:
当为变量分配存储空间时,为实际变量分配的空间是相同大小变量的两倍。这样做是因为返回的变量使用Fortran格式,它占用了两倍的空间。见分配zout
在这个例子中。
为使该变量与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
dotProductComplex
一些1级BLAS函数(例如,zdotu
和zdotc
)返回一个双复杂
类型,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
utdu_slv
这个例子utdu_slv.c
调用LAPACK函数zhesvx
和dsysvx
。要查看示例,请打开utdu_slv.c
在MATLAB编辑器中。要创建MEX文件,请将源文件复制到一个可写文件夹。
拷贝文件(fullfile (matlabroot,“外来的”,“例子”,“refbook”,“utdu_slv.c”),“。”)
构建:
fortheaderdir = fullfile (matlabroot,“外来的”,“例子”,“refbook”);墨西哥人(“v”,“-R2017b”,[“我”fortheaderdir),“utdu_slv.c”fortfile,“-lmwlapack”)