MATLAB与FORTRAN接口技术
Fortran与matlab在数组上的对比
航院 力 9 金鹏 2009011622 Fortran 与 matlab 均是数值计算中的有力的工具。前者以效率著称,后者以灵活出众。 二者在矩阵运算上很有特色, “matlab”更是矩阵实验室的简称。二者在矩阵运算上,自然 值得一比。 首先最简单的一个是生成随机矩阵并作矩阵乘法的速度对比。 Fortran 中: program cpr implicit none integer ,parameter::n=300 real(8) a(n,n),b(n,n),c(n,n) integer i,j real(8) t1,t2,t call cpu_time(t1) call ran_matrix(a) call ran_matrix(b) call cpu_time(t2) print*, t2-t1 c=matmul(a,b) call cpu_time(t2) print*, t2-t1 !print*, a contains subroutine ran_matrix(a) implicit none real(8) a(n,n) integer i,j real(8) r call random_seed() do i=1,n do j=1,n call random_number(r) a(i,j)=10000*r enddo enddo end subroutine ran_matrix end program 加上注释,共有 40 行。 运行结果如下图:
6];
c = [a;
b];
d = [a' b']
另外,对于等差情况还可以 X=(0:0.1:1)*pi %fortran 中的三元下标虽然跟这个有所区别,但是在使用是差不多 X=linspace(0,10,10) 又是需要取对数坐标的 X=logspace(0,2,11) 对于 linspace ,logspace 都有三个参数依次为起始数值,终了数值,和数据点个数。这 种功能在 Fortran 中似乎没有与相对应的方式。 MATLAB 的高维情况,也是直接赋值作为声明: >> b(3,3,3,3)=9 b(:,:,1,1) = 0 0 0 0 0 0 0 0 0
MATLAB 与C C + + 、FORTRAN语言混合编程
MATLAB 与C/ C + + 、FORTRAN语言混合编程摘要:对MATLAB 与C/ C + + 和FORTRAN 语言进行混合编程的常用方法进行了介绍,分析了其实现方式和各自的利弊,并用实例对MEX 文件实现方式进行了较详细的论述.关键词: MATLAB ; C/ C + + ; FORTRAN ; 混合编程中图分类号: TP313 文献标识码: A 文章编号:16722948X(2004) 0620547205 1 混合编程的意义及其实现方式1. 1 混合编程的意义MATLAB 语言具有功能强大、开发效率高等诸多优点, 已在工程实际中得到广泛应用, 但是与FORTRAN、C/ C + + 等语言相比,其执行效率较低,特别是当程序中含有大量循环语句(例如迭代计算)时,MATLAB 就有些力不从心, 速度很慢, 而运用FORTRAN 等擅长数值计算语言进行编程,其运行效率高. 一方面,如果放弃MATLAB 强大功能和数量众多的应用工具箱,无疑是资源的极大浪费. 另一方面,针对工程实际,人们用FORTRAN、C/ C + + 语言已编写了大量实用程序,如果将其重新改写成M 文件移植到MATLAB 环境中,不仅要花费大量的时间和精力,而且有时还降低了其运行效率. 可否将二者优势互补呢? 混合编程就是其有效的解决途径.1. 2 混合编程的实现正是考虑到上面这些原由,MATLAB 系统提供了其应用程序接口(Application Program Interface) 来解决这些问题. API 主要包括3 部分:MEX 文件———外部程序调用接口,用来在MATLAB 环境下调用FORTRAN、C/ C + + 语言编写的程序;MAT 文件应用程序———数据输入输出接口,用于MATLAB 系统与外部环境之间互传数据; 计算引擎函数库———MATLAB 处于后台作为一个计算引擎,与其它应用程序建立客户机/ 服务器关系,在其它应用程序中调用[1 ,2 ] .1. 2. 1 MEX 文件MEX 文件是按照一定格式,用FORTRAN 或C/C + + 语言编写的源程序,在MATLAB 下借助相应的编译器,生成的动态链接函数的统称. 在Windows操作系统下,是用MATLAB 附带的批处理mex. bat来编译生成文件后缀名为. dll (Dynamic Link Li2brary) 动态链接库文件,该文件可在MATLAB 环境下,像命令函数一样直接运行和调用,使用起来极为方便. 采取MEX 文件方式,是重复利用已有FOR2TRAN、C/ C + + 程序,让MATLAB 和FORTRAN、C/ C + + 语言优势互补的最有效和常用的方式,但不足的是其开发的程序只能在MATLAB 环境下运行.本文将详细的论述基于Windows 平台上其实现过程.1. 2. 2 MAT 文件应用程序MATLAB 数据存储的默认文件名后缀为. mat ,习惯上称该格式的文件为MAT 文件, MAT 文件应用程序提供了一种方法让MATLAB 与其它软件进行数据输入输出.1. 2. 3 MATLAB 计算引擎MATLAB 引擎采用客户机/ 服务器的计算模式,通过对Activex 技术的支持,实现VC 应用程序(客户机) 与MATLAB(服务器) 的动态连接通信. 假如用户想以较短的时间开发前台为VC + + 产生的用户界面,后台由MATLAB 计算分析的应用程序, 使用MATLAB 引擎是很好的选择. 在实际应用中,MAT2 LAB 作为ActiveX 的自动化服务器,接收通过引擎传来的数据和指令信息并进行相应的处理,然后将结果经过引擎返回给发送请求的客户机. 但这种方式需要MATLAB 在后台的适时运行, 如果用户没有安装MATLAB ,应用程序就无法正常运行,而且应用程序与MATLAB 间通过字符流传递数据和命令参数,整个算法在MATLAB 中执行,从而降低了程序的执行效率,因而其实际应用不多.1. 2. 4 MCC 和MATCOM前面提到的几种方式都是以MATLAB 为主,程序的运行都离不MATLAB 环境. 除此之外,另一种方式就是将MATLAB 语言程序翻译成C/ C + + 语言代码,再用C/ C + + 语言的方式进行开发. MAT2 LAB 自己提供了C 语言翻译程序mcc , 另一种是原第3 方公司MathTools 开发的MATCOM. 后者出现较早,功能远比MATLAB 自己的翻译程序强大,所以MathTools 公司已经被MathWorks 公司收购,并已将其开发技术融于新推出的MATLAB 6. 0 (Re2 lease 12) 中. 但二者都不完善,有大量的MATLAB函数及数据类型是不能兼容变换的,所以有时会发现将简洁的MATLAB 程序翻译成C 语言程序很晦涩.翻译后的C 程序几乎不适合手动去维护,更谈不上升级了[3 ] .2 C/ C + + 语言MEX文件的实现C/ C + + 语言MEX 文件的实现包括,源程序的编辑、MEX 编译和调试. 在编译和调试前要进行编译器的配置.2. 1 C/ C+ + 语言MEX文件的编写C/ C + + 语言MEX 文件的编写格式,除了要遵循C/ C + + 语言语法外,还须要加入用于MATLAB和C/ C + + 语言通信协议———入口子程序. 我们首先看一个极简单的C 语言MEX 文件,该程序的作用是两个数求和,源程序如下:/ / 示例程序myplus. c :求两个Double 数之和# include ”mex. h”/ 3 计算功能子程序3 /void myplus (double y[ ] ,double x[ ] ,double z[ ]) {y[0 ] = x[0 ] + z[0 ] ;}/ 3 以下是入口子程序3 /void mexFunction(int nlhs ,mxArray 3 plhs[ ] ,int nrhs ,const mxArray 3 prhs[ ]){double 3 x , 3 y , 3 z ;int mrows0 ,ncols0 ;int mrows1 ,ncols1 ;/ 3 检查输入输出变量个数3 /if (nrhs ! = 2)mexErrMsgTxt (”Two input s arquired”) ;elseif ( nlhs > 1) mexErrMsgTxt ( ”Too many output argument s”) ;/ 3 输入量必须是两个非复数double 类型3 /mrows0 = mxGetM(prhs[0 ]) ;ncols0 = mxGetN(prhs[0 ]) ;if ( ! mxIsDouble (prhs [ 0 ]) | | mxIsComplex (prhs [0 ]) | | ! (mrows0 = = 1 & &ncols0 = = 1) ) mexErrMsgTxt ( ”Input s must be all noncomplex scalar double. ”) ;mrows1 = mxGetM(prhs[1 ]) ;ncols1 = mxGetN(prhs[1 ]) ;if ( ! mxIsDouble (prhs [ 1 ]) | | mxIsComplex (prhs [1 ]) | | ! (mrows1 = = 1 & &ncols1 = = 1) ) mexErrMsgTxt ( ”Input s must be all noncomplex scalar double. ”) ;if (mrows0 ! = mrows1| | ncols0 ! = ncols1) mexErrMsgTxt ( ”Input s must be same dimen2sion. ”) ;/ 3 为返回参数创建矩阵3 /plhs [ 0 ] = mxCreateDoubleMat rix ( mrows0 ,ncols0 ,mxREAL) ;x = mxGet Pr (prhs[0 ]) ;z = mxGet Pr (prhs[1 ]) ;548 三峡大学学报(自然科学版) 2004 年12 月y = mxGet Pr (plhs[0 ]) ;/ 3 调用计算功能子程序myplus () 3 /myplus (y ,x ,z) ;}上面程序为一典型的C 语言MEX 文件,程序由两部分构成:一个计算功能子程序(myplus () 函数) 和一个入口子程序(mexFunction () 函数) . 顾名思义,计算功能子程序包含所有实际所需完成的功能、算法,我们已有的或现编的C/ C + + 、FORTRAN 程序就被当做计算功能子程序使用,它由入口子程序调用. 入口子程序是MATLAB 系统和外部程序之间沟通的桥梁,主要用来完成两者之间的通信. 上面示例程序中,mexFunction () 函数有大量语句是用于检查变量的数据类型等辅助性工作,这是必要的,因为MAT2LAB 语言不像C/ C + + 等语言变量使用前须声明,对类型的检查可以避免许多错误的发生.下面简要的说明一下上面程序中用到的MAT2LAB API 函数,它们在mex. h 或mat rix. h 中声明. mexFunction () ,入口子程序函数,其格式如下:void mexFunction(int nlhs ,mxArray 3 plhs[ ] ,intnrhs ,const mxArray 3 prhs[ ]){⋯⋯/ / 一些必要的代码,用来完成MATLAB 系统与计算功能子程序之间的通信}其参数的含意为:nrhs 和nlhs ,整型变量,分别为调用MEX 文件时输入、输出参数的个数. prhs、plhs ,指针数组,其元素分别为指向输入、输出参数的指针. mexErrMsgTxt () ,用于输出错误信息,并返回到MATLAB 命令提示符下.mxGetM() 和mxGetN ( ) ,获得矩阵的行数和列数,参数为指向矩阵的指针,如程序中的mrows0 =mxGetM(prhs[0 ]) 的作用为:得到第一个输入实参的行数,并赋值给整型变量mrows0.mxIsDouble () 、mxIsComplex () ,判断矩阵是否为双精度型、复数型. 输入参数为矩阵指针,返回值为BOOL 值.mxCreateDoubleMat rix(int m ,int n ,mxComplex2ity complexFlag) ,创建一个未赋值的双精度矩阵,m ,n 为创建矩阵的行、列数,complexFlag 为标识是实数还是复数. 该函数返回所创建矩阵的指针.mxGet Pr () 获得矩阵实数部分的指针,输入参数为矩阵的指针,返回值为矩阵实数部分的双精度指针.MATLAB API 函数还包含其它许多接口函数,分为mx2函数和mex2函数,详细情况可查阅相关文献.MEX 源程序编写完成后,还要经过编译后才能生成dll 文件,供MATLAB 或其它程序调用,编译前要对MATLAB 进行编译器的配置.2. 2 编译器的配置编译器的配置是通过MATLAB 的配置文件(mexopt s. bat ) 进行的,其具体过程为: 在MATLAB 命令窗口下键入:mex2steup ,随后系统弹出一个DOS 窗口,按照提示一步步选择完成即可. 该命令可带许多参数,可针对不同的操作系统进行多种配置[2 ,3 ] . 2. 3 C/ C+ + 语言MEX文件的编译编译方法很简单,直接在MATLAB 命令提示符下键入:mex filename ,其中filename 为需编译的源程序名. 如果提示有错误信息,需查错,修改源程序、调试. 直到没有错误信息提示. 编译通过生成的可执行的dll 文件,可在MATLAB 命令提示符下或其它程序中调用.3 FORTRAN语言MEX文件的实现FORTRAN 语言MEX 文件的实现步骤和C/ C+ + 语言MEX 文件大体相同.3. 1 FORTRAN 语言MEX 文件的编写MATLAB 提供了C/ C + + 和FORTRAN 两种语言的接口,基于FORTRAN 语言和前面讲到的基于C/ C + + 语言的MEX 文件在实现方式上相差不大. 我们先还是看一下前面程序用FORTRAN 语言MEX 文件来实现的源程序.! 示例程序myplus. f :求两个数之和! 计算功能子程序subroutine myplus (y ,x ,z)! 变量声明real 3 8 x ,y ,zy = x + zreturnend! 以下是入口子程序subroutine mexFunction(nlhs ,plhs ,nrhs ,prhs) ! 参数声明integer nlhs ,nrhs ,plhs ( 3 ) ,prhs ( 3 )! 调用API 库函数的声明integer mxGet Pr ,mxCreateFullinteger mxGetM ,mxGetN ,mxIsNumeric! 程序内部使用变量的声明第26 卷第6 期陈建平等MATLAB 与C/ C + + 、FORTRAN 语言混合编程549 integer xpr ,ypr ,zprinteger mrows ,ncols ,sizereal 3 8 x ,y ,z! 检查输入输出变量个数if (nrhs. ne. 2) thencall mexErrMsgTxt (’Two input s arquired’)elseif (nlhs. gt . 1) thencall mexErrMsgTxt ( ’Too many output argu2ment s’)endif! 输入量必须是两个数mrows = mxGetM(prhs (1) )ncols = mxGetN(prhs (1) )size = mrows 3 ncolsif (mxIsNumeric (prhs (1) ) . eq. 0) thencall mexErrMsgTxt (’Input s must be a number’)endifmrows = mxGetM(prhs (2) )ncols = mxGetN(prhs (2) )size = mrows 3 ncolsif (mxIsNumeric (prhs (2) ) . eq. 0) thencall mexErrMsgTxt (’Input s must be a number’)endif! 为输出参数创建矩阵plhs (1) = mxCreateFull (mrows ,ncols ,0)xpr = mxGet Pr (prhs (1) )zpr = mxGet Pr (prhs (2) )ypr = mxGet Pr (plhs (1) )! 将数据指针转换成双精度型call mxCopyPt r ToReal8 (xpr ,x ,size)call mxCopyPt r ToReal8 (zpr ,z ,size)! 调用计算功能子程序mypluscall myplus (y ,x ,z)! 将计算结果传给输出数据指针call mxCopyReal8ToPt r (y ,ypr ,size)returnend该程序的结构和内容与前面myplus. c 大致相同,也是由两部分:一个计算功能子例行程序和一个入口子例行程序构成,其程序中参数和变量大多相同,这里就不一一再介绍了. 但值得一提的是, FOR2TRAN 和C/ C + + 语言语法规则相差较大,在C/ C ++ 语言中对字符大小写是敏感的,而FORTRAN 语言中大小写是一样的;C/ C + + 语言中数组是按行存储,数组下标是从0 开始计数的,而FORTRAN 语言中数组是按列存储,数组下标从1 开始. C/ C + + 语言几乎支持所有的数据类型,支持头文件,操作很灵活. 而FORTRAN 语言,不支持指针,参数传输较麻烦[1 ] .3. 2 FORTRAN语言MEX文件的编译和C/ C + + 语言MEX 文件一样,编译前需进行编译器的配置,方法同前,只是选的编译器不同(例如Compaq Visual Fort ran version 6. 6) . 编译的过程也一样,MATLAB6 的编译命令(不再区分C/ C + + 文件用cmex. bat ,FORTRAN 用fmex. bat) 统一使用mex.bat 批处理命令,其后的文件名须带扩展名.4 Visual Studio IDE 下MEX文件的建立和调试4. 1 Visual Studio 的配置前面使用的mex 文件的使用方式,类似在DOS下程序开发方式,程序编辑、编译、调试和执行分开,每次只能创建一个文件,需要来回切换MATLAB 命令窗口和编辑窗口,操作较麻烦. VC 是在Windows环境下的优秀开发平台,将MATLAB 和VC 强强联手,无疑是非常好的混合编程方式. 下面就简要介绍一下如何在VC 的IDE( Integrated Development Envi2 ronment) 中编译MEX 程序. 为了表述的方便,我们以MATLAB6. 5 (安装在C: \ matlab6p5) 和Visual C ++ 6. 0 (安装在D : \ Program Files \ Microsoft Visual Studio) 为例,可以分为以下5 步[4 ,5 ] :①用VC 创建一个工程(假定名称为myproject) ,类型选择Win32 Dynamic - link Library ,并将自己的MEX源程序和mexversion. rc (在C: \ MATLAB6p5\ extern \ include 下) 加入到工程.②创建一个与工程同名的定义文件(myproject .def) ,内容如下:L IBRARY myproject . dllEXPORTS mexFunction(如果是FORTRAN 该行改为EXPORTS -MEXFUNCTION @16 )并加入定义文件myproject . def 到工程③定位库文件( . lib) 位置. 具体操作为:选择VC下拉菜单Tools/ Options ⋯,在弹出的对话框Show di2rectories for 下拉框中选择Library files ,在下部的Di2 rectories : 中添加C: \ MATLAB6p5 \ extern \ lib \win32 \ microsoft \ msvc60 目录. 然后选择VC 下拉菜单Project/ Settings ⋯, 在弹出的对话框中选择550 三峡大学学报(自然科学版) 2004 年12 月Link 选项卡,在Category 栏中选择general 选项,在出现的Object/ library modules : 框中填入libmx. lib , libmex. lib , and libmat . lib.④加入MATLAB include 目录. 具体操作为:选择VC 下拉菜单Tools/ Options ⋯,在弹出的对话框Show directories for 下拉框中选择Include files ,在下部的Directories : 中添加C: \ MATLAB6p5 \ extern\ include 目录. 然后选择VC 下拉菜单Project/ Set2tings ⋯, 在弹出的对话框中选择C/ C + + 选项卡,在Category 栏中选择Preprocessor 选项,在出现的Pre2 processor definitions : 框中填入MATLAB-MEXFILE.⑤最后就是调试运行配置. 具体操作为:选择VC下拉菜单Project/ Settings ⋯,在弹出的对话框选择Debug 选项卡,在Category 栏中选择General 选项,在出现的Executable for debug session :框中填入C: \ MATLAB6p5 \ bin \ win32 \ matlab. exe.4. 2 在Visual Studio 中使用MATLAB add - inMATLAB6. X为Visual Studio IDE 提供了add -in ,该add - in 使MATLAB 的M - files 非常容易的就可加入到VC 环境中,使VC 和MATLAB 很好的融合. 不过要使用该插件需要简单的配置. 具体操作如下:使用前面提到的mex - steup 命令进行编译器的配置, 选择VC 作为编译器后, 该命令自动装载MATLAB add - in. 然后选择VC 下拉菜单Tools/Customize ⋯, 在弹出的对话框中勾选MATLAB add- in 复选框. 随后VC 就出现了如图1 所示的工具条,其中第一个按钮的功能就是用来将M - files 添加到Visual Studio IDE 中的.图1 图标示例5 结语本文对MATLAB 与C/ C + + 和FORTRAN 语言进行混合编程的常用4 种方法进行了论述. 4 种方法各有其优势,又各有不足. 其中MEX 文件的方式,特别是Visual Studio IDE 下混合编程,将MATLAB和Visual Studio 开发系统相接合,以其功能强大、操作便利和利于升级维护,具有广泛的使用价值.参考文献:[1 ] 刘志俭. MATLAB 应用程序接口用户指南[M] . 北京:科学技术出版社,2000.[2 ] 飞思科技产品研发中心. MATLAB6. 5 应用程序接口编程[M] . 北京:电子工业出版社,2003.[3 ] 薛定宇. 科学运算语言MATLAB5. 3 程序设计与应用[M] . 北京:清华大学出版社,2000.[4 ] 王振义. MATLAB 和Visual C + + 的混合编程[J ] . 雁北师范学院学报,2002 ,18 (2) :26~29.[5 ] 马海阳,王艳华,孙道恒. MATLAB 的VC 编程接口浅析[J ] . 信息技术,2003 ,27 (3) :55~57.[责任编辑张莉]第26 卷第6 期陈建平等MATLAB 与C/ C + + 、FORTRAN 语言混合编程551__。
Matlab与其他语言和软件的接口问题
Matlab与其他语言和软件的接口问题>******************************************************************** ****<=================================== - [返回]1).如何在Matlab中读取Excel的xls数据文件?:#FangQ(Qianqian.Fang@), 2002/6/22. BigGreen/MathTools#使用xlsread()函数,或者使用excel的ActiveX接口来进行更复杂的操作,参见:/support/solutions/data/25179.shtml=================================== - [返回]2).如何在Excel中嵌入Matlab?:#FangQ(Qianqian.Fang@), 2002/6/22.BigGreen/MathTools#如果你的Matlab安装有ExcelLink,它可以实现Excel与Matlab直接的数据交换,可以在Excel中直接调用matlab的函数,进行绘图或者数据处理。
不过如果没有安装ExcelLink,你仍然可以使用Matlab的ActiveX接口来调用matlab,下面是一个Excel宏函数,作为例子:#BrettShoelson(bshoelson@),2001/11/01,comp.soft-sys.matlab#Sub CallMatlab()' Dimension variablesDim MatLab As ObjectDim ResultDim Invals(3, 4) As DoubleDim MImag() As DoubleDim i, j As Integer' Invoke MatlabSet MatLab = CreateObject("Matlab.Application")' Read Invals from current spreadsheet' (Assume Invals stored in B3:E5)For i = 0 To 2For j = 0 To 3Invals(i, j) = ActiveSheet.Range(Cells(i+3,j+2),Cells(i+3,j+2)).ValueNext jNext i' Send Invals to MatlabCall MatLab.PutFullMatrix("a", "base", Invals, MImag)' Send instructions to MatlabResult = MatLab.Execute("b=a.^2;")' Retrieve ResultCall MatLab.GetFullMatrix("b", "base", Invals, MImag)' Store Result in B8:E10ActiveSheet.Range("B8:E10").Value = InvalsEnd Sub=================================== - [返回]3).mcc,mex,mbuild都是作什么用的?:#FangQ(Qianqian.Fang@), 2002/6/22.BigGreen/MathTools#这个问题我一直都不是很清楚,看过compiler的PDF帮助之后,知道个大概,也不知道说得对不对:mcc(生成c/cpp文件)-----m--mex------ mex/dll|---x--mbuild-----C/C++ compiler----独立执行的程序mex文件是一种编译后的动态连接文件,需要在matlab中执行,优点是执行速度比m文件快,而且如果你不想提供m文件源码,可以使用编译后的mex/dll文件。
matlabfastsim fortran_轮轨关系
matlabfastsim fortran_轮轨关系MATLAB中的fastsim工具箱是一个用于仿真和优化机电系统动态行为的工具箱。
在fastsim中,轮轨关系是一种重要的力学约束,用于模拟铁路车辆在行驶过程中的动力学行为。
以下是使用MATLAB fastsim进行轮轨关系仿真的一般步骤:1. 准备模型:首先,需要创建或导入一个描述轮轨关系的模型。
这个模型通常包括车辆、轨道、轮对以及相应的力学约束。
模型可以根据实际需求进行简化或复杂化。
2. 定义参数:在仿真过程中,需要定义一些参数,如车辆质量、轨道不平度、轮对弹性模量等。
这些参数可以根据实际情况进行调整。
3. 编写仿真函数:使用MATLAB fastsim工具箱,可以编写一个仿真函数来计算车辆在行驶过程中的动态响应。
这个函数通常包括以下几个部分:a. 初始化:设置初始条件,如车辆位置、速度等。
b. 迭代求解:使用数值积分方法(如四阶龙格库塔法)求解轮轨关系方程。
c. 更新:根据求解得到的车辆运动状态,更新其他部件的运动状态。
d. 输出:计算并输出感兴趣的性能指标,如车辆振动、轨道磨损等。
4. 运行仿真:使用MATLAB运行仿真函数,得到车辆在行驶过程中的动态响应。
5. 分析结果:分析仿真结果,提取有用的信息,如车辆振动特性、轨道磨损规律等。
这些信息可以用于评估车辆行驶性能、优化轮轨关系设计等。
需要注意的是,这里提供的仅是一般性的指导,具体实现时可能需要根据实际问题进行调整。
另外,MATLAB fastsim工具箱还有许多其他功能,如优化算法、可视化等,可以进一步扩展轮轨关系仿真的应用范围。
MATLAB与FORTRAN接口技术
MAT LAB与F ORT RAN接口技术枣庄学院数学与信息科学系 赵晓艾[摘 要]介绍了动态链接函数库M EX文件,MAT文件及MAT LAB引擎的调用原理,利用MAT LAB和F ORT RAN接口技术实现F ORTRAN程序计算结果的可视化过程。
[关键词]MAT LAB F ORTRAN AP I MAT LAB是一种面向科学与工程计算的高级语言,凭借其强大的科学计算与可视化功能,简单易用的开放式可扩展环境,取得了在矩阵代数、数值计算、数字信号处理、动态仿真﹑神经网络控制等领域的广泛应用。
:它语言简洁,使用方便灵活,程序书写形式自由,图形功能强大。
MAT LAB扩充能力强,交互性好,有丰富的库函数,它包含了大量的MAT LAB与C/F ORTRAN语言之间的接口函数,在进行复杂数学运算时可以直接调用,这些接口函数是MAT LAB的一个非常重要的组成部分。
虽然MAT LAB是一个完全独立的编程和数据运算的集成环境,使用它可以方便地完成许多工作,但是,很多时候仅靠MAT LAB环境还是不能很好的完成任务,例如:MAT LAB中程序循环,其它语言编写的算法的移植要重新编写M文件等。
F ORT RAN语言是传统的数值处理语言,处理速度高,编程简便,其强大的数值计算能力和长期积累的大量的科学计算程序库及工程应用软件,始终占据着科学和工程计算领域的重要地位,有很多源代码资源可供使用,但它在图形功能方面有较大的不足。
MAT LAB提供的AP I(App licati on Pr ogra m I nterface)弥补了彼此的不足,它支持MAT LAB与外部数据和程序的交互。
MAT LAB接口包括:在MAT LAB环境中调用其它语言编写的程序和算法,通过M EX文件实现;MAT LAB与其它编程环境的数据交互,通过MAT文件实现;其它编程环境使用MAT LAB的计算绘图功能,通过MAT LAB计算引擎实现。
MATLAB7.0使用详解-第18章 应用程序接口
18.2 在MATLAB中调用C或FORTRAN
本节介绍MEX文件的相关知识,并举例说明在 MATLAB中调用C或FORTRAN子程序的方法。
18.2.1 C语言中的MEX文件
在上一章中,提及过MEX文件,本小节进一步为读者介绍有 关MEX文件的内容。MEX是MATLAB和Executable两个单词的 缩写,MEX文件是一种可以在MATLAB中调用的C语言或者 FORTRAN语言衍生程序代码,一般的MEX文件经过适当的编 译后,生成的目标文件可以被M语言解释器(即MATLAB命令 窗口方式)调用执行,这种文件在Windows操作系统中使用 后缀“.dll”标示(动态链接库——Dynamic Link Library)。 MEX文件一般应用于已经存在的大规模的C或FORTRAN程序序。下面首先举一个简单的例子,说明MEX文件的创建方 法和基本组成结构。
18.1 MATLAB中的数组
18.1.1 MATLAB数组 18.1.2 C中的mxArray结构
18.1.1 MATLAB数组
要理解和编写MATLAB的接口程序,其基础和关键 是对于MATLAB的数组结构要了解清楚,因为任何 MEX程序、引擎程序以及MAT程序都需要通过访问 MATLAB的数组来执行指定的操作。阅读过本书之 前章节的读者应该对于数组(Array)并不陌生, 本小节将进一步介绍数组的存储方式。 MATLAB的数据类型可以分为多种,有整型、浮点 类型、字符串、元胞、构架等,但所有的数据类 型都是只用一种对象类型存储,即“数组”,所 有的标量和复合元素都视为数组。MATLAB按“列” 存储数组中的数据(元素)。
第18章 应用程序接口
MATLAB作为一款优秀的工程软件,不仅其自身拥有强大的 功能和友好的环境界面,还具有很好的开放性,主要表现 在:丰富多样的工具箱(Toolbox)可以适应各学科、各领 域的需要;提供了专门的应用程序接口(API),和外部应 用程序实现“无缝”结合。 本章主要针对MATLAB的API的相关知识,介绍以下几方面内 容。 MATLAB中的数组及C语言中的mxArray类型。 在MATLAB中使用MEX文件来调用C或FORTRAN子程序。 通过MATLAB引擎(Engine),在MATLAB中执行运算,并将 结果返回到C或FORTRAN程序中。 创建和访问标准的MATLAB的MAT文件应用程序,实现MATLAB 数据的输入和输出。
MATLAB接口简介
MATLAB接⼝简介 MATLAB实现了与众多外部程序和设备的借⼝: 通过MEX⽂件的建⽴,MATLAB能够调⽤C、C++、FORTRAN等程序设计语⾔的⼦程序;通过使⽤MATLAB引擎,可在C、C++、FORTRAN程序代码中直接调⽤MATLAB中的函数与命令;通过MATLAB C/C++数学函数库直接实现C/C++与MATLAB的混合编程,并建⽴可独⽴运⾏程序;通过MATLAB提供的串⼝借⼝,可以实现从外围设备(如MODEM)直接输⼊数据到MATLAB⼯作空间,再利⽤MATLAB 进⾏处理。
1. MEX⽂件 MEX⽂件是MATLAB⼀类外部程序调⽤接⼝,可以在MATLAB中像调⽤MATLAB内建函数⼀样调⽤C、C++、FORTRAN等语⾔编写的⼦程序,⽽⽆需将它们重新编写为MATLAB的M⽂件,从⽽使资源得到充分利⽤。
MEX⽂件有以下⼀些⽤处:对于已存在的C、C++、FORTRAN程序,只需编写接⼝,就可在MATLAB中调⽤,⽽不必重写M⽂件。
对于那些在MATLAB中执⾏效率不⾼的语句(如循环体),可以把它们放在 C、C++、FORTRAN中编写并编译,从⽽提⾼执⾏效率。
2. MATLAB引擎 如果说mex⽂件是为了在MATLAB中调⽤c/c++和fortran编写的⼦程序,那么MATLAB引擎既是为了在c/c++和fortran程序中能够调⽤MATLAB。
MATLAB计算引擎是⼀组允许在别的应⽤程序中与MATLAB交互的函数库和程序库。
在调⽤的过程中,MATLAB引擎函数库在后台⼯作,MATLAB通过它与别的应⽤程序进⾏通信。
通过MATLAB计算引擎可以完成以下功能:调⽤⼀个数学函数或⼦程序来处理数据,如在⽤户程序中求阵列转置或计算⼀个快速傅⾥叶变换等,MATLAB就是⼀个强有⼒、编程灵活的数学⼦函数库。
建⽴⼀个具有特殊⽤途的完整系统,如雷达图像分析或进⾏⽓象⾊谱分析等,可以使⽤c等⾼级语⾔来编写⽤户界⾯,⽽后台采⽤MATLAB作为计算引擎,从⽽达到缩短开发周期,减少开发困难的⽬的。
在MATLAB中调用VISUAL FORTRAN程序的实现
在MATLAB中调用VISUAL FORTRAN程序的实现
陈元莉
【期刊名称】《西华师范大学学报(自然科学版)》
【年(卷),期】2002(023)001
【摘要】在使用MATLAB语言的过程中,有些用户希望在MATLAB中直接运用一些过去编写的经典而高效的FORTRAN程序,而MATLAB本身并未提供与FORTRAN的接口,这就需要用户编写有关的接口程序.本文阐述了在MATLAB中如何调用VISUAL FORTRAN程序,通过MATLAB对FORTRAN MEX文件的调用实例,叙述了在MATLAB中调用VISUAL FORTRAN程序的原理和实现过程.【总页数】5页(P61-65)
【作者】陈元莉
【作者单位】四川师范学院物理系,四川,南充,637002
【正文语种】中文
【中图分类】TP311.54
【相关文献】
1.VB、VC++、Visual FORTRAN程序对MATLAB的调用 [J], 周明莹
2.VC++调用Fortran及MATLAB程序混合编程实现 [J], 马清华;王明海
3.FORTRAN程序调用MATLAB引擎实现计算可视化 [J], 聂万胜;庄逢辰;黄玲;邹勤
4.DLL在Visual Basic程序调用MATLAB库函数中的应用 [J], 李小文;屠宇;梁慧
冰
5.在Visual Basic程序中调用Fortran动态链接库的方法 [J], 鲜飞军;杨合
因版权原因,仅展示原文概要,查看原文内容请购买。
Matlab 调用Fortran Dll数组传递范例
Matlab 调用Fortran Dll数组传递范例
1、Fortran代码
test.f90
SUBROUTINE add(outdata,indata)
!DEC$ ATTRIBUTES C,DLLEXPORT :: add
!伪注释说明test.dll文件中包含一个名为add的子例行程序,C即为按C 调用约定输出
IMPLICIT NONE
REAL outdata(2),indata(3)
outdata(1)=indata(1)-indata(3)
outdata(2)=indata(2)+indata(3)
ENDSUBROUTINE
2、.h代码
test.h
void add(float*, float*);
//该代码名须与子例行程序名相同,该头文件可在任何文件编辑器中编写,编写完后保存头文件,本例中头文件名为:test_c.h。
其实,每一个dll文件可包含多个子例行程序,那么在书写头文件代码时,就需要对应书写多个void代码。
3、Matlab代码
test.m
clc; clear all;
loadlibrary('test.dll','test.h');
x=[0,0];indata=[1,2,3];
outdata=calllib('test', 'add', x,indata);
%调用test.dll文件里的add子例行程序
%x虽然对应Fortran里的输出(指针),但它并不返回值
%outdata才是返回的值,输出在输入前面(如果仅输出一个数组的话)unloadlibrary test。
fortran与matlab混合编程实现溴化锂水溶液的物性计算可视化
fortran与matlab混合编程实现溴化锂水溶液的物性计算可视化以溴化锂水溶液为工质的吸收式制冷既可利用蒸气,热水,燃气、燃油等能源,还可利用工业余热、废热、太阳能、地热能等低品味能源作为动力,同时工质对大气臭氧层无破坏作用,这些节能、环保方面独特的优势使得溴化锂吸收式制冷具有了广阔的市场和良好的发展前景。
随着溴化锂吸收式制冷机组在技术与应用上的不断发展,人们对机组的优化设计、变工况条件下最佳运行参数的动态调整和自动控制等方面提出了更高的要求,也越来越多地要求利用计算机进行设计和计算。
传统的这类计算都要借助于溴化锂水溶液的物性数据图表,从图表上查出或手算出有关物性参数和热力过程特性数据。
但是这种方法繁琐,费时,误差较大,已经远远不能满足现在的应用需求,为此,能不能找到一种可以动态绘图,自动捕捉状态点,鼠标实时显示状态点参数,并根据已知的的状态参数求其他未知的参数,根据用户需要直接绘制溴化锂吸收式制冷循环流程图的方法,已成了急需解决的问题。
基于此,本文尝试从满足以上几种功能出发,利用FORTRAN与Matlab混合编程,充分结合Fortran运算速度快,Matlab矩阵计算及图形处理功能强的优点,实现了溴化锂水溶液物性计算的可视化。
1 溴化锂水溶液物性计算可视化的基本思想使用过Fortran、C和C++等传统的高级语言进行编程的读者可能都知道,在对矩阵,运算尤其是复杂的绘图操作时,程序设计将是一件非常困难,又不能很好的实现预想效果的任务,Matlab(又称Matrix Labrotary)就是Mathworks 公司推出的最初用于解决该问题的以矩阵(Matrix)和阵列(Array)为基本编程单元的,拥有完整的控制语句、数据结构、函数编写与调用格式和输入输出功能的具有面向对象程序设计特征的高级程序语言,其强大的科学计算与可视化功能,简单易用的开放式可扩展环境以及30 多个面向不同领域而扩展的工具箱(TOOLBOX)支持,包括了通信系统、信号处理、图象处理、小波分析、鲁棒控制、系统辨识、非线性控制、模糊控制、神经网络、优化理论、样条、商用统计分析等大量现代技术学科的内容,使得MATLAB 在许多科学领域中成为计算机辅助设计与分析、算法研究和应用开发的基本工具和首选平台。
基于Matlab与Fortran混合编程的一维fCSEM正演可视化
2期
柳 建 新等 : 于 Mal 基 t b与 F rrn混合 编程 的一 维 f S M 正 演可视化 a o ta CE
25 2
J m U 。ri j 而 md + / () R m n
H —
j ( ] )
一I L d
譬
r
( 2 )
s[ — ‘ r + .’ -j , ) n d ( m m
工具 箱 , 结合 F rrn语言 处理 速 度 高 , 程 简便 , ota 编
有很 多 源代码 资源 可供使 用 的优 点 , 直观地 显示模
高计 算 的效率 和 精 度 。但 人 们 对 各 种地 形 图表 的 优化 设计 , 工况 条 件 下 最 佳 运 行 参 数 的 动 态 调 变 整, 以及 自动控 制等 方面 提 出了更高 的要求 。传 统
基 本 思 想
1 1 层 状大地 水平 电偶极 子 电磁场 表达 式 . ]
C 一 一 I Z d L
s 9 3 er3 3 r kr) i [ -  ̄( - i - 22] n k
得: 一 ∑ 一 ∑ C pH 一 ∑ = E E * ; = =
) ]
ct( h + … +ct- ohm22 oh1
R — ct[ h + ct- mj1 ohm】】 oh1 / 0 .
m 2
∑ C ; H * H 一∑ H 一 ∑ C l Z* 0
则有 :
ct( h + … + ct 也 ohm22 oh1
lt lN0 N
) ]
一
l / EI ∑C
MatLab与Fortran混合编程实现结构优化和可靠性分析
万方数据万方数据万方数据万方数据万方数据MatLab与Fortran混合编程实现结构优化和可靠性分析作者:赵秀丽, 易平作者单位:大连理工大学建设工程学部,辽宁大连,116024刊名:水利与建筑工程学报英文刊名:Journal of Water Resources Architectural Engineering年,卷(期):2012,10(3)参考文献(18条)1.聂维中;卢林枫浅谈MATLAB在土木工程领域的应用[期刊论文]-建材世界 2009(05)2.施阳;李俊MatLab语言工具箱--TOOLBOX实用指南 19983.张建仁;许福友两种求解可靠指标的实用算法[期刊论文]-工程力学 2002(03)4.贡金鑫;仲伟秋;赵国藩结构可靠指标的通用计算方法[期刊论文]-计算力学学报 2003(01)5.易平概率结构优化设计的高效算法研究[学位论文] 20076.信任浅谈国际标准中结构可靠度设计新方法[期刊论文]-水利与建筑工程学报 2009(03)7.冯云芬;贡金鑫建筑结构基于可靠指标的设计方法[期刊论文]-工业建筑 2011(07)8.侯钢领;欧进萍结构可靠指标计算的优化模型及其在Matlab环境下的实现[期刊论文]-哈尔滨建筑大学学报 2001(01)9.张高峰;贾建勋;张大巍应用Matlab优化工具箱求解可靠度问题 2004(01)10.李志华;张光海;康海贵基于Matlab优化工具箱的工程结构可靠度计算[期刊论文]-四川建筑科学研究 2005(03)11.王勖成有限单元法 200312.朱伯芳有限单元法原理与应用 200913.李亚智;赵美英;万小朋有限元法基础与程序设计 200414.王世香精通MatLab接口与编程 200715.刘志俭MATLAB应用程序接口用户指南 200016.朱伯芳;黎展眉;张璧城结构优化设计原理与应用 198417.贡金鑫;魏巍巍;赵国藩工程结构可靠性设计原理 200718.许林基于可靠度的结构优化研究[学位论文] 2004本文链接:/Periodical_fsjs201203004.aspx。
Matlab与Fortran混合编程之DLL实现方法
Matlab与Fortran混合编程之DLL实现方法潘克家1,2,3汤井田1郑洲顺2PAN KejiaTANG JingtianZHENG Zhoushun1.中南大学地球科学与信息物理学院,长沙4100832.中南大学数学科学与计算技术学院,长沙4100833.高性能计算与随机信息处理教育部重点实验室,长沙410081Mixed language programming in Matlab and Fortran via dynamic linklibrary摘要:简要介绍Matlab和Fortran各自的优缺点,详细阐述Matlab调用Fortran生成的动态链接库实现混合编程的两种方法。
以高斯约当列主元素法求逆为例,从计算时间、精度等方面详细比较了同一算法在多种实现方式下的执行情况。
计算结果表明:基于动态链接库的混合编程方法能充分利用现有软件包,结合Fortran计算效率高、Matlab矩阵计算及图形处理功能强的优点,符合当前科学工程计算程序设计的发展方向。
动态链接库;混合编程;Matlab语言;Fortran语言;高斯-约当消去法10.3778/j.issn. 1002-8331.2011.31.0011002-8331(2011)31-0001-03ATP311.11国家高技术研究发展计划(863)(the National High-Tech Research and Development Plan of China under Grant No.2007AA06Z134);国家重点基础研究发展规划(973) (No.2011 CB606306);中南大学自由探索计划(No.2011QNZT 102);中南大学博士后科学基金。
潘克家(1981-),男,讲师,在站博士后,中南大学地质资源与地质工程博士后流动站,主要研究领域为智能计算、优化算法;汤井田(1965-),博士,教授,博士生导师;郑洲顺(1964-),博士,教授,博士生导师。
matlab调用fortran 生成的dll文件
混合编程之Matlab 调用Fortran1.测试平台Window 10 64位系统Matlab 2017a 64位Simply Fortran v2.42.Matlab 调用Fortran 之DLL实现2.1.生成DLL文件步骤1:在Simply Fortran v2.4上,新建一个Shared Library(DLL)项目,项目名随意。
步骤2:由于在64位的Matlab上调用DLL,因此我们须将项目的DLL文件也生成为64位,否则Matlab将会提示错误“不是有效的Win32应用程序” 。
注意Target Name的dll文件名须符合为Matlab变量命名法则。
另外,数值之间的传递须有相同的数值类型,否则将会运行出错。
这里先提一句,我们生成的DLL文件可被调用,一般按C调用约定,因此,Fortran的数值类型须与C的数值类型匹配。
在Fortran中常用的数据参数类型有:REAL:表示浮点数据类型,即小数,等价于C的float;INTEGER:表示整数类型,相当于C的int数据类型;DOUBLE PRECISION:表示双精度数据类型,相当于C的double数据类型。
在本例中,我们均采用double数据类型,为了方便,可如下设置:步骤3:书写DLL代码subroutine test(c,a,b)!输出变量必须位于输入变量之前,即c须位于a,b之前,否则在后续Matlab 调用中会错误(笔者认为仅与伪注释!DEC$ A TTRIBUTES REFERENCE有关)!DEC$ A TTRIBUTES C,DLLEXPORT::test!DEC$ A TTRIBUTES REFERENCE ::c !返回值,传地址!上一行伪注释语句说明的是test_f.dll文件中包含一个名为test的子例行程序,C即为按C调用约定输出real::a,b,cc=a+bend subroutine步骤4:生成DLL直接Build project,即可生成test_f.dll文件。
Matlab和Fortran的混合编程
MexFunction 的作用分为两部分,将 Matlab 环境传入的参数转化为目标语言 的数据结构;调用目标语言的算法程序,并将返回值转化为 MxArray 数据,并 返回给 Matlab 环境。
Interface Fuction 是普通的目标语言函数格式,但是他的作用是如下两部分: 将目标语言的数据结构转化为 MxArray 数据;调用 Matlab 环境的算法程序,并 将返回值转化为目标语言的数据结构数据,并返回给计算程序。
Matlab 和 Fortran 的混合编程
1 概述 Matlab 的复数矩阵运算、符号运算、数据后处理等特点构成一个强大的数值
计算平台的基础。此外,巨大的并还在不断增加的数据分析算法库和各种应用工 具箱,扩展了该平台,开放的混合编程支持使其可以充分利用各种;从使用的角 度看,Matlab 语言考虑了工程应用的需要,融合了面向对象、函数式、动态语言 等的特点,编程十分简单,其交互界面友善,因此利用 Matlab 可以极其方便的 构建数字实验室。
类为转化后的变量,第三类为中间临时变量; 程序段 2 为参数有效性校核,当 Matlab 环境传入的参数不合法时,给出异
常,提高系统的稳定性; 程序段 3 将 Matlab 环境传入的 MxArray 变量转化为 Fortran 数据格式; 程序段 4 调用目标函数; 程序段 5 将目标函数生成的结果转化为 MxArray 数据结构,并返回给 Matlab
FORTRAN, VC++,VB, DELPHI与MATLAB接口技术方法综述
FORTRAN, VC++,VB, DELPHI与MATLAB接口技术方法综述摘要:面向对象的可视化编程工具FORTRAN,VC++,VB, DELPHI使用广泛,而MATLAB计算机绘图功能强大,它们之间的接口技术使之进行相互融合,从而更好地体现各自的优越性。
关键词: MATLAB,VC++,VB,FORTRAN,DELPHI,接口技术,混合编程中图分类号:TP311 文献标识码:AThe Review of interfacing technol ogy between FORTRAN,VC++,VB,DELPHI and MATLABAbstract: FORTRAN is one of the most popular visual programming tools at present. The same as FORTRAN ,VC++,VB and DELPHI are other three Kinds of the most excellent programming languages, while MATLAB has powerful functions in calculating and drawing. The interfacing technology which combining MATLAB with FORTRAN ,VC++,VB and DELPHI, respectively bring out the best of their own advantagesKeywords :MATLAB,FORTRAN,VC++,VB,DELPHI,Interface technology,Mixed ProgrammingMATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
Fortran与matlab在数组上的对比
Fortran与matlab在数组运算上的对比航院力9 金鹏2009011622 Fortran与matlab均是数值计算中的有力的工具。
前者以效率著称,后者以灵活出众。
二者在矩阵运算上很有特色,“matlab”更是矩阵实验室的简称。
二者在矩阵运算上,自然值得一比。
首先最简单的一个是生成随机矩阵并作矩阵乘法的速度对比。
Fortran中:program cprimplicit noneinteger ,parameter::n=300real(8) a(n,n),b(n,n),c(n,n)integer i,jreal(8) t1,t2,tcall cpu_time(t1)call ran_matrix(a)call ran_matrix(b)call cpu_time(t2)print*, t2-t1c=matmul(a,b)call cpu_time(t2)print*, t2-t1!print*, acontainssubroutine ran_matrix(a)implicit nonereal(8) a(n,n)integer i,jreal(8) rcall random_seed()do i=1,ndo j=1,ncall random_number(r)a(i,j)=10000*renddoenddoend subroutine ran_matrixend program加上注释,共有40行。
运行结果如下图:对于MATLAB中,程序代码:tic;t1=clock;a=rand(300,300);b=rand(300,300);c=a*b;toc;t2=clock;t=t2-t1;只用一行,其中包括了8句语句,为Fortran的1/5。
结果显示:Elapsed time is 0.015592 seconds.t=0.016当然,有时也有:Elapsed time is 0.022325 seconds.上下浮动相当大。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n e e l sn h i tg rn h , r s
0 引言
MA L T AB 是一种面 向科学与工程计算 的高级语言 ,凭 借其强大的科 学计 算与可视 化功能, 简单易用的开放式可扩 展环境,取得了在矩 阵代数 、数 值计算、数 字信号处理、动 态仿真 、神经 网络控制等领 域的广泛应用 。: 言简洁 , 它语 使 用 方 便 灵 活 , 程 序 书 写 形 式 自由 , 图 形 功 能 强 大 。 MA L T AB 扩充能力强,交互性好 ,有丰富的库函数 ,它包 含了大量 的 MA L T AB 与 CF R R /O T AN 语言之间的接 口函 数, 在进行复杂数学运算 时可以直接 调用 ,这些接 口函数是 MA L T AB 的一个非常重要 的组成部分 。虽然 MA L T AB 是 个 完全独立 的编程和数据运算 的集成环境 , 使用它可以方 便地 完成许 多工作 ,但是 ,很多 时候仅靠 MA L T AB环境 还 是不能很 好的完成任 务,例 如:MA AL 中程 序循 环,其 T B 它语言编写 的算法 的移植要重新编写 M 文件 等。 FRR O T AN 语言是传统的数值处理语言,处理速度高, 编程简便 , 其强大的数值 计算 能力和长 期积 累的大量 的科 学 计算程序库及工程应用软件 , 始终 占据 着科 学和 工程 计算 领 域 的重要地位 , 有很 多源代码资源可供使用 , 它在 图形功 但 能方而有较大 的不足 。
名 称 mcF nt n x uci o
me E a tn x vlr g si m x l tb e Cama a l l me E r g x xr Ms T t me G t r v x eA r a
功 能简 介 定义 ME 文件 的接 口函数 X
执 行 MA L B 中 的命令 TA 调 用 MA L B 指令 M 文件 TA 输 出报错信 息 从 Mal t b中读 出矩 阵 a
Mi oo ue Ap l a o s o 2 , o1, 08 c cmp t r r pi t n 1 4N . 2 0 ci V . 2
文 章 编 号 : 10 —5X(0 81 .0 30 0 777 2 0 )20 6 —2
学 习园地
微 型 电脑 应 用
20 年 第 2 08 4卷第 1 2期
MA L B 与 F R R N 接 口技 术 TA O TA
赵 晓 艾
摘 要:介绍 了动态链接 函数库 ME 文件 ,MAT文件及 M T A 引擎的调 用原 理,利用 M T A X A LB A L B和 F T A 接 口技 OR R N
术 实现 F T A 程 序 计 算 结 果 的可 视 化 过 程 。 OR R N 关键词:MA L B OR R N;A I T A ;F T A P;
擎实现 。
然后载入 并执行第一 个与用户键 入的文件名 相匹配 的可执 行文件。在 M T AB 中,由于 ME 文件的执 行优先级高 A L X 于 M 文件 ,所 以即使一个文件名 同时存在两种类 型的可执 行文件中,也会先执行 ME 文件 。 X F T AN语言 的几个常用 ME 函数 : OR R X
中图分类号:T 3 2 P 1
文献标识码 :A
C 口子 程 序 人 sbo t e x u cin(lsp snh, rs u rui F nt nh ,l , rsph) n me o h C参数 声明: n e r h ( ,ph( it e ls ) rs ) g p
1 ME 文件 X
11 X文件 介绍 lME ME 文 件 是 由 CF R R X /O T AN 语 言 编 写 的 ,编 译 后 生 成 A LB M T A 动 态 链 接 子 程 序 , M T A 中导 入 和 执 行 , 可A L B 如 同 M T A 的 内置 函数 一样 ,主 要应 用 有 :对 已有 的 A L B CF R R /O T AN 程序 ,可通过 ME 方式在 M T A 环境 中 X A L B 直接调用 ; 对影响 MA L T AB执行速度 的 F R循环 , 以编 O 可 写相应 的 C O T AN 子程序完成相 同的功能 ,并编译成 F / RR ME X,提高运行速度 。F R R N 语言 ME O TA X文件通 常由两
MA L B 提 供 的 A I ( pi t nPo rm tr c ) TA P Ap l ai rga I ef e c o n a 弥补 了彼此的不足 ,它支持 MA L T AB与外 部数据和程序 的 交互 。 T AB接 口包括 :在 MA L B环 境中调用其 它语 MA L TA 言编 写的程序和算法 , 过 ME 通 X文件实现 ; T AB与其 MA L 它编程环境的数据交互 ,通过 MA T文件实现 ;其它编程环 境使用 M T AB 的计算绘 图功能 ,通过 M T A 计算 引 A L A L B
一
其中 ph rs是指 向输入变量的 mx r y类 型指针 ,nh Ar a rs 是输入变量的个数 ,ls ph 是指 向输 出变量的 m A ry类型指 x ra 针 ,nh F R R N 语言编程 ,不涉 2 ) O TA 及到任何的接 口内容, 这部分程序可 以单独编写一个 子程序