MATLAB与FORTRAN混合编程接口程序技术的研究
MATLAB与FORTRAN混合编程接口程序技术的研究

如 果 你 的 F R R N 编译 器 如 F R R N 0等 支 持 %vl 构 。 O TA OTA 9 a结 即 用 户 可 以在 程 序 中 讲 一 个 变 量 声 明为 指 针 类 型 , 时 对 数 据 的 访 这
包 等 。 是 现 在 国际 上 流 行 的许 多 大 型软 件 都 是基 于 F R R N、 但 O TA C、+ 这 些 语 言 开 发 的 ,因此 在这 些 领 域 仍 然 有 着 不 可 替 代 的 地 C+ 位。 MA L B( a i L brtr) 言 是 一 种 以 矩 阵 ( tx 和 阵 T A M tx aoa y 语 r o mai) r 列 (r y 为 基 本 编 程 单 元 的 , 有 完 整 的控 制 语 句 、 据 结 构 、 aa) r 拥 数 函 数 编 写 与 调 用 格 式 等 具 有 面 向 对 象 程 序 设计 特 征 的 高 级 程 序 设 计 语 言 。读 者 不但 可 以 利 用 它 方 便 快 捷 地 完 成 小 规 模 的 算 法 验
交 换 的 m A ry结 构 体 的 内 存 地 址 作 为 一 个 整 型 数 值 传 递 给 xr a
Compaq Visual Fortran与Matlab混合编程实现小波域地震信号多尺度分析

Compaq Visual Fortran与Matlab混合编程实现小波域地震信号多尺度分析徐天吉;程冰洁【期刊名称】《物探化探计算技术》【年(卷),期】2008(30)3【摘要】小波函数在时间域和频率域均具有良好的局部化特征,运用小波函数对地震信号进行变换处理,能够提取体现地质体宏观与微观特征的属性参数.在Compaq Visual Fortran环境下,调用Matlab小波工具箱中的函数与命令进行混合编程,能够快速、准确地实现地震信号的多尺度分析,提取体现地质体频率属性的最佳尺度参数.运用Compaq Visual Fortran卓越的计算功能完成较大数据文件的读取,再调用Matlab中丰富的小波函数及其它数学函数库,实现地震信号的各类计算,可有效地减轻程序编写的难度,提高工作效率,缩短研究周期.在含油气的地质体中,尺度参数越大,频率衰减则更加突出,最佳的尺度参数能为油气预测提供重要的参考信息.该方法已在川西坳陷深层须家河组新场地区含气性检测中推广试用,所获得的异常区段与多口测井含气段吻合良好.【总页数】6页(P185-190)【作者】徐天吉;程冰洁【作者单位】中石化西南分公司勘探开发研究院德阳分院,四川,德阳,618000;中石化西南分公司博士后科研工作站,四川,成都,610081【正文语种】中文【中图分类】P631.4+14【相关文献】1.MatLab与Fortran混合编程实现结构优化和可靠性分析 [J], 赵秀丽;易平2.Fortran与Matlab混合编程实现溴化锂水溶液的物性计算可视化 [J], 王书中;由世俊;孙贺江;李秋生3.Visual C++与Compaq Visual Fortran混合编程研究 [J], 马清华;王明海4.VC++调用Fortran及MATLAB程序混合编程实现 [J], 马清华;王明海5.Visual C++与MATLAB混合编程实现图象三维重建 [J], 孙慧;李莉因版权原因,仅展示原文概要,查看原文内容请购买。
MATLAB 与FORTRAN 语言混合编程的接口技术

摘要:阐述了在matlab 环境下,调用 fortran 语言的原理,并通过一实例说明如何实现matlab,fortran 两种语言的混合编程。
关键词:fortran;matlab;接口技术;混合编程中图分类号:tp311文献标识码:a文章编号:1009-3044(2007)18-31643-01peng yu-shan1,ren xiang-he2(1.shandong agricultural university,tai'an 271018,china;2.shanghai institute of optics and fine mechanics,chinese academy of sciences,shanghai 201800,china) matlab是当今流行的科学计算软件,专门以矩阵的形式处理数据,它把数值计算和可视化环境集成到一起,许多用户在使用时希望能够直接调用过去的fortran经典计算程序。
虽然matlab没有现成的接口程序,但其提供的标准api工具,使用户能够根据需要来编写接口程序,完成matlab与其它外部程序的通讯。
下面本文就以具体实例来说明如何编写完整的matlab与fortran的接口程序。
1matlab 环境的配置mex文件是matlab 语言的外部程序调用接口,它可以调用外部的fortran 程序。
要调用外部的fortran程序,必须先用mex命令来搭建matlab调用fortran的平台,具体步骤为:在matlab命令提示符下键入命令>> mex -setup系统提示然后键入 y,回车,系统又会提示:[2] lcc c version 2.4 in d:\matlab7\sys\lcc[0] none图12 fortranmex文件的编写fortran 语言的mex文件有两部分组成:接口程序和计算程序。
2.1 接口程序接口程序可以完成两项任务:第一是从输入的参数中获得计算所需要的数据;第二是把计算的结果返回matlab。
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中调用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], 鲜飞军;杨合
因版权原因,仅展示原文概要,查看原文内容请购买。
fortran与matlab混合编程实现溴化锂水溶液的物性计算可视化

fortran与matlab混合编程实现溴化锂水溶液的物性计算可视化以溴化锂水溶液为工质的吸收式制冷既可利用蒸气,热水,燃气、燃油等能源,还可利用工业余热、废热、太阳能、地热能等低品味能源作为动力,同时工质对大气臭氧层无破坏作用,这些节能、环保方面独特的优势使得溴化锂吸收式制冷具有了广阔的市场和良好的发展前景。
随着溴化锂吸收式制冷机组在技术与应用上的不断发展,人们对机组的优化设计、变工况条件下最佳运行参数的动态调整和自动控制等方面提出了更高的要求,也越来越多地要求利用计算机进行设计和计算。
传统的这类计算都要借助于溴化锂水溶液的物性数据图表,从图表上查出或手算出有关物性参数和热力过程特性数据。
但是这种方法繁琐,费时,误差较大,已经远远不能满足现在的应用需求,为此,能不能找到一种可以动态绘图,自动捕捉状态点,鼠标实时显示状态点参数,并根据已知的的状态参数求其他未知的参数,根据用户需要直接绘制溴化锂吸收式制冷循环流程图的方法,已成了急需解决的问题。
基于此,本文尝试从满足以上几种功能出发,利用FORTRAN与Matlab混合编程,充分结合Fortran运算速度快,Matlab矩阵计算及图形处理功能强的优点,实现了溴化锂水溶液物性计算的可视化。
1 溴化锂水溶液物性计算可视化的基本思想使用过Fortran、C和C++等传统的高级语言进行编程的读者可能都知道,在对矩阵,运算尤其是复杂的绘图操作时,程序设计将是一件非常困难,又不能很好的实现预想效果的任务,Matlab(又称Matrix Labrotary)就是Mathworks 公司推出的最初用于解决该问题的以矩阵(Matrix)和阵列(Array)为基本编程单元的,拥有完整的控制语句、数据结构、函数编写与调用格式和输入输出功能的具有面向对象程序设计特征的高级程序语言,其强大的科学计算与可视化功能,简单易用的开放式可扩展环境以及30 多个面向不同领域而扩展的工具箱(TOOLBOX)支持,包括了通信系统、信号处理、图象处理、小波分析、鲁棒控制、系统辨识、非线性控制、模糊控制、神经网络、优化理论、样条、商用统计分析等大量现代技术学科的内容,使得MATLAB 在许多科学领域中成为计算机辅助设计与分析、算法研究和应用开发的基本工具和首选平台。
MATLAB与FORTRAN程序的混合编程研究
址, 读取相应内容。当使用库函数 ./567,0 获得 "#$%#& 中数组的数据指针后,要考虑两种情 况:一种是在 ’()$)#*88 及其以前的标准中, 必 须 使 用 ./9:;2,70$:)61<= 和 ./9:;2)64 1<=$:,70 函数来处理该指针:另一种是在 ’()4 $)#* >? 的标准中,可以通过 @ A1< 直接使用数 据。图 B 是 "CD 文件的执行流程图。
表! 名称 WIR&B1LM031 WIR6ZDE5MC01K WIRTDEEWDMEDS WIR6CC!5K#RM WIR[IMWDMC0R WIR8BMWDMC0R 编写 "#$ 文件所用到的常用函数 功能简介 定义 WIR 文件的接口函数 执行 !"#$"% 中的命令 调用 !"#$"% 指令、 ! 文件等 输出报错信息 复制一个 WR"CCDJ 结构体 输出一个 WD"CCDJ 结构体
Y T Z 刘志俭 O G"HI"! 应用程序接口用户指南 Y G Z O 北京: 科学出版社, SBBBO Y S Z 许 波 O G"HI"! 工程数学应用 Y G Z O 北京: 清华大学 出版社, SBBBO
@ A ] X
!"# $%&#’ ()*+),$%-+ .*) /0!102 ,-’ 345!506 ()*+),$
+ ’()$)#* 语言 "CD 文件的例子
Matlab混合编程方法研究
Matlab混合编程方法研究覃杨森;郭世伟;刘语乔【摘要】利用Matlab函数工具箱可以提高对工程数据的分析效率.C++builder 能够便捷的设计用户界面,并可以直接与系统底层交换数据,因此研究C++builder 与Matlab的混合编程具有实际应用意义.研究如何使用matcom中间件将Matlab平台下的M函数编译为CPP文件,并研究实践将M文件编译形成动态库,研究分析在C++builder平台下以进程调用Matlab函数应用程序的方式.总结分析了Matlab混合编程方法对系统资源的使用情况.%The analysis efficiency of engineering data can be improved by using Matlab function toolbox.C++builder can easily design the user interface , and can exchange data directly with the bottom layer of the system, so it is meaningful to study the mixed programming of C++builder and Matlab. Study how to use the Matlab middleware to compile the M function on the Matcom platform to the CPP file , and study the practice of compiling M files into a dynamic library , research and analysis in the C++builder platform to call the process of Matlab function application. The use of system resources by Matlab mixed programming method is summarized and analyzed.【期刊名称】《电子设计工程》【年(卷),期】2017(025)017【总页数】4页(P107-110)【关键词】MATLAB;混合编程;中间件;动态库【作者】覃杨森;郭世伟;刘语乔【作者单位】中国飞行试验研究院陕西西安 710089;中国飞行试验研究院陕西西安 710089;中国飞行试验研究院陕西西安 710089【正文语种】中文【中图分类】TN99Matlab作为应用最为广泛的数学软件,具有非常强大的数值计算、数据分析处理、系统分析、图形显示甚至符号运算的功能,已经在如图像处理、语音处理以及控制论、系统论等各个领域得到深入应用[1]。
Fortran与Matlab混合编程在水力计算中的应用
Fortran与Matlab混合编程在水力计算中的应用
王成;李健
【期刊名称】《水利科技与经济》
【年(卷),期】2007(013)010
【摘要】对水力学中的非恒定流经典算例程序利用Fortran与Matlab混合编程求解,接口程序增加了2个输出参数,并利用Matlab的%val构造器进行程序间的数据传送,提高了混合程序的执行效率.给出了Fortran与Matlab混合编程中的关键技术要点.
【总页数】3页(P765-767)
【作者】王成;李健
【作者单位】长江水利委员会,长江科学院,武汉,430010;长江水利委员会,长江科学院,武汉,430010
【正文语种】中文
【中图分类】TP31
【相关文献】
1.Fortran与C#混合编程在地震属性分析中的应用 [J], 安晶;安鹏
2.Matlab与 Fortran的混合编程及其应用 [J], 刘羽
3.C#与 Fortran 混合编程在剪切波速测试中的应用 [J], 李进;曲淑英
4.VB和Fortran混合编程在工程计算中的应用 [J], 李险峰
5.Fortran和MATLAB的混合编程在水轮机特性曲线处理中的应用 [J], 唐岳灏;杨建东
因版权原因,仅展示原文概要,查看原文内容请购买。
基于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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
" 接口程序面临的问题以及解决办法
由于 !"$#A& 的数据 存 储 格 式 与 *A$+A7 的 不 同 ! 因 此 需 要利用 *A$+A7 中的 A89 接口程序 ! 把 *A$+A7 中的 矩 阵 类 型 转 换 为 !"#$#A& 程 序 可 以 使 用 的 双 精 度 变 量 ! 然 后 把 !"#! $#A& 的运行结果转换为 *A$+A7 可以使用的矩阵 类 型 输 出 ! 这 里 *A$+A7 使用指针这个功能使二种数据格式进行转换的 ! 因为 *A$+A7 A89 是 以 一 种 特 殊 的 数 据 类 型 51A//-4 结 构 体 来 工 作 的 ! 在 !"#$#A& 中 没 有 这 样 的 一 种 数 据 类 型 ! 所 以 *A$+A7 使 用 了 指 针 来 与 !"#$#A& 程 序 交 换 数 据 $ 首 先 !*A$+A7 将 需 要
中
3& Ti qrGE6 nM2EqOrlM2EqOmhM2EqO Ti C&6@26’, Gi C&6@26’, 0,@’?6 B63 对 =.@?2l=’-@2/-h;V 进行编译后 ! 可以得到 =.@?2l=’-@2/-h;3-- 动 态连接库程序 ! 在 bU)^Ud 命令窗口中 ! 输入以下命令 % .r!G Tt[ Q# gr!Q [tT G# Cr=.@?2l=’-@2/-h!.Eg#
PD2/3D.0=? 5?1@D=<.03= B:;Q/N:/QCN=;QCN=/QCR ( 入口子程序四个参数说明 ( ( 其 中 :/QC %S &!:;QC %S & 分 别 代 表 了 输 入 " 输 出 参 数 地 址 的
指针数组 ! ( 其中 S 表 示 数 组 的 长 度 ! 而 =/QC "=;QC 都 是 整 数 类 型 ! 分 别代表了输入 " 输 ( 出的个数 $ ( 调用 A89 函数的说明 9=.?/>?/ 51T?.:/N 51(/?-.C:-/C?N51(/?-.!D;;B 根据各函数的功 能而使用 R ) ) 入口子程序的任务有二 ( 其一是从输入 的 参 数 获 得 计 算 所 需 要 的 数 据 !在 计 算 子 例 行 程 序 中 使 用 ’其 二 是 把 计 算 的 结 果 返 还 给一个用于输出的数据指针 ! 这样 *A$+A, 就能从用户的计算子 例行程序中得到计算结果 ! 完成 !"#$#A& 与 *A$+A, 之间的通 讯任务 $
! 引言
使 用 过 !"#$#%& 等 高 级 程 序 语 言 进 行 算 法 开 发 研 究 的 读 者可能都已经知道 ! 虽然用户使用这些高级编程 语 言 不 再 需 要 直 接 对 计 算 机 硬 件 进 行 操 作 !但 是 在 进 行 大 量 数 组 "矩 阵 运 算 程 序 编写时 ! 可能编写的代码冗长 ! 而且出错不易查找调 试 ! 这 是 因 为 这些语言本身并不包含矩阵类型的数据结构 ! 这 里 主 要 是 只 语 言 本 身 !而 不 是 指 针 对 这 些 高 级 程 序 设 计 语 言 开 发 的 增 强 包 "升 级 包等 # 但是现在国际上流行的许多大型软件都是基于 !"#$#%& " ’ "())这些语言开发的 ! 因此在这些领域仍然有着不可替代的地 位$ *%$+%, %*-./01 +-23/-.3/4 & 语 言 是 一 种 以 矩 阵 %5-./01 & 和 阵 列 %-//-4 & 为基本编程单元的 ! 拥有完整的控制 语 句 " 数 据 结 构 " 函 数编写与调用格式等具有面向对象程序设计特征的高级程序设 计语言$ 读者不但可以利用它方便快捷地完成小规模的算法验 证 "程 序 开 发 和 调 试 工 作 !而 且 可 以 便 用 它 进 行 大 规 模 的 复 杂 应 用程序设计 ! 非常有效 $ 由于这几种高级程序设计语言的特点 ! 譬如 ! 如果把 *6$! +67 与 !"#$#6& 相结合起 来 混 合 编 程 ! 就 可 以 弥 补 互 相 之 间 的 不足 ! 而且在实际开发过程中 ! 可以大量调用已经编写好的 !"#! $#6& 程序和 *6$+6, 强大的矩阵计算与绘图功能 ! 这 样 我 们 就 可以提高实际编程开发的效率 $ 为了调用已经大量存在的 !"#$#6& 程序 ! 以及 *6$+6, 大 量 的 内 部 函 数 等 !*6$+6, 提 供 了 一 个 689 %6::;0<-.03= 8/3>/-5 9=.?/@-<?&! 用于与外部数据交换的借口 $ 但是这里面临一个问题 ! 由于这二种编程语言数据存储格式不同 ! 故不可 以 直 接 通 讯 ! 因 此要使用一个接口程序 $
交 换 的 51A//-4 结 构 体 的 内 存 地 址 作 为 一 个 整 型 数 值 传 递 给 !"#$#A& 程序 ! 然后在 !"#$#A& 程序中 ! 通过 *A$+A7 应用程 序接口函数库提供的访问函数 B-<<?CC /3D.0=?CE 使 用 此 整 数 值 来 访 问 51A//-4 结构体的内容 ! 这些访问函数会自动将此整数值作为 内存地址 ! 读取相应的内容 $ 如果你的 !"#$#A& 编译 器 如 !"#$#A&FG 等 支 持 HI-; 结 构 ! 即 用户可以在程序中讲一个变量声明为指针类型 ! 这 时 对 数 据 的 访 问就简单多了 ! 当用户对 *6$+67 应用程序接口函数库提供的访 问 函 数 %-<<?CC /3D.0=?C & 来 调 用 516//-4 结 构 体 的 内 容 ! 就 可 以 通 过 HI-; 直接访问数据 ! 而无须使用子例 行 程 序 51’3:48./$3#?-;J 和子例行程序 51’3:4#?-;J$38./ 了 ! 如果编译器不支持则 需 要 使 用这些语句 ! 下面会详述 $ 这 里 就 涉 及 到 了 *KL 文 件 ! 它 是 *A$+A7 应 用 接 口 函 数 %A89 & 的 重 要 组 成 部 分 ! 主 要 包 括 了 二 个 部 分 ! 入 口 子 程 序 %>-.?! M-4 /3D.0=? &N 它是计算子例行程序与 *A$+A7 之间通讯的 借 口 ’ 子 例 行 程 序 %<35:D.-.03=-; /3D.0=? &! 它 包 括 了 所 有 实 际 计 算 工 作 的 源 代 码 ! 是 完 全 的 !"#$#A& 语 言 编 程 ! 不 涉 及 任 何 的 接 口 内 容 ! 完成实际的工作 ! 其具体使用格式如下 ( O" 入口子程序 (
C =.@?2l=’-@2/-h;V C 第一部分入口程序 8’g?&’@26, =,lj’6C@2&6 M6-%8E /-%8E 6?%8E /?%8O 26@,?>,? /-%8MmOE /?%8MmO !6-%8E 6?%8 26@,?>,? =l+?,.@j’--E =l_,@F?E =l_,@bE =l_,@e !=l28e’! =,?2C 26@,?>,? =GE 6GE =TE 6TE 82n, ?,.-ImlMGiiOE hMGiiOE nMGiiO 26@,?>,? lo/?E ho/?E no/? C 检查输入输出参数的个数 2VM6?%8;6,;TO @%,6 C.-- =,lB??b8>)l@ M’@A& 26/’@8 ?,p’2?,3 (O ,-8,2V M6-%8;6,;GO @%,6 C.-- =,lB??b8>)l@ M ’q’8@ &6, &’@/’@ ?,p’2?,3 (O ,632V C 获取第一个输入参数的维数 =Gr=l_,@b M/?%8MGOO 6Gr=l_,@e M/?%8MGOO 82n,r=Gm6G C 判断第一个输入参数是否为一个数量 2V M=l28e’=,?2C M/?%8MGOO;,p;iO @%,6 C.-- =,lB??b8@)l@ M’@%, V2?8@ 26/’@ =’8@ g, . 6’=g,? (O ,632V C 获取第二个输入参数的维数 =Tr=l_,@b M/?%8MTOO 6Tr=l_,@e M/?%8MTOO 82n,r=Tm6T C 判断第二个输入参数是否为一个数量 2V M=l28e’=,?2C M/?%8MTOO;,p;iO @%,6 C.-- =,lB??b8@)l@ M ’@%, 8,C&63 26/’@ =’8@ g, . 6’=g,? (O ,632V C 检查二个输入矩阵的维数是否一致 2VM=G;6,;=T;&?;6G;6,;6TO @%,6 C.-- =,lB??b8@)l@ M ’26/’@ =’8@ g, @%, 8.=, 82n, (O ,632V C 创建输出参数矩阵 ! 并将该矩阵的内存地址存放于 /-%8MGO
0:; /;<;=>?: =@ABC 8>AD>=E 9FC;>G=?; 0;?:FHIB; AG 3HJ;K 8>AD>=EEHFD LHC: 310415 =FK -./0/12 MAENHO;>< 4P Q:;FD’R 4P. SHFD! T’* Q?:AAO AG MHUHO 6FDHF;;>HFDR V;G;H PFHU;><HCW AG 0;?:FAOADWR V;G;H !+""(RM:HF=, !* MAENBC;> 9FGA>E=CHAF 3=F=D;E;FC M;FC;>R V;G;H 4=@A> X QA?H=O Q;?B>HCW 5B>;=BR V;G;H !+"""’RM:HF=Y ’12345637 0:; =BC:A> HOOB<C>=C;< @AC: 3104151 =FK -./0/12 ?AENHO;><Z =KU=FC=D;< =FK K>=L@=?[<R =< L;OO =< C:; F;?;<<HCW AG EHJ;K N>AD>=EEHFD LHC: C:; CLA ?AENHO;><\ Q;IB;FCR C:; =BC:A> =F=OW];< N>AD>=E HFC;>G=?; C;?:FHIB; LHC: @AC: CLA ?AENHO;><R C:;F HFC>AKB?;< :AL CA ?>;=C; =FK :AL CA B<; C:; 367 GHO;R =C O=<C DHU;< = K;C=HO;K ;J=ENO;\ 89: ;<4=27 310415, -./0/12, 189, 367 GHO;