fortran调用matlab
FORTRAN程序调用MATLAB引擎实现计算可视化
收稿日期:2000205229 作者简介:聂万胜(1969-),男,内蒙古人,博士,主要研究方向:航空推进理论的科学计算和可视化、飞行器测试发射的科学计算和可视化.文章编号:1001-9081(2000)11-0060-02FORTRAN 程序调用M AT LAB 引擎实现计算可视化聂万胜,庄逢辰,黄 玲,邹 勤(装备指挥技术学院,北京怀柔101416)摘 要:探索了FORTRAN 程序调用MAT LAB 函数的基本原理,用实例介绍了调用MAT LAB 引擎函数,实现FORTRAN 程序计算结果的可视化过程。
并给出如何编译带有MAT LAB 引擎函数的FORTRAN 程序的具体技术。
关键词:FORTRAN ;MAT LAB ;引擎;可视化中图分类号:TP311.52 文献标识码:A1 概述FORTRAN 和C 等高级语言使人们无需直接对计算机硬件资源进行操作。
而被称为第四代计算机语言的M AT LAB ,则利用其丰富的函数资源,代替了C 语言和FORTRAN 的冗长代码,给用户带来了最直观、最简洁的程序开发环境。
在欧美很多高校,M AT LAB 已经成为自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的基本教学工具;在设计研究单位和工业部门,M AT LAB 被广泛地用于研究和解决各种具体问题。
其最主要的特点有:语言简洁,使用方便灵活,程序书写形式自由,库函数极其丰富,图形功能强大。
由于不管是C 语言还是FORTRAN 语言,其图形和可视化功能的实现都需要较为专业的编程水平,所以本文旨在充分发掘M AT LAB 的功能,利用M AT LAB 所提供的接口函数实现FORTRAN 程序的计算结果可视化,充分综合了FORTRAN 程序的执行速度快而M AT LAB 可视化处理简单方便,开发周期短的优点。
2 FORTRAN 调用M A T LAB 函数的原理由于F ORTRAN 程序和M A T LA B 的运算单位不同,前者以数为运算单位,后者以矩阵为基本的运算单位,所以数据类型不能直接匹配。
matlab代码转为fortran代码
matlab代码转为fortran代码Matlab是一种常用的科学计算软件,而Fortran是一种编程语言。
在科学计算中,我们常常需要将Matlab代码转换为Fortran代码,以便在其他平台上使用。
本文将介绍如何将Matlab代码转换为Fortran代码,并提供一些实用的技巧和建议。
让我们来看一个简单的Matlab代码示例:```matlab% Matlab code to calculate the sum of an arrayarray = [1, 2, 3, 4, 5];sum = 0;for i = 1:length(array)sum = sum + array(i);enddisp(sum);```上述代码的功能是计算一个数组的和。
现在,我们将逐步将其转换为Fortran代码。
我们需要声明并初始化一个数组。
在Fortran中,我们使用`REAL`关键字来声明实数类型的数组,并使用`DATA`语句来初始化数组。
Fortran中的数组索引从1开始,因此我们需要相应地调整循环的起始值和终止值。
```fortran! Fortran code to calculate the sum of an arrayREAL :: array(5)REAL :: sum = 0.0DATA array /1.0, 2.0, 3.0, 4.0, 5.0/DO i = 1, 5sum = sum + array(i)END DOPRINT *, sum```接下来,我们需要使用循环来遍历数组并计算和。
在Fortran中,我们使用`DO`循环来实现。
需要注意的是,Fortran中的循环索引变量是自动定义的,并且在循环结束后仍然可用。
我们可以使用`PRINT`语句来输出结果。
现在,我们已经成功将Matlab代码转换为Fortran代码。
下面是完整的Fortran代码示例:```fortranPROGRAM sum_arrayIMPLICIT NONEREAL :: array(5)REAL :: sum = 0.0DATA array /1.0, 2.0, 3.0, 4.0, 5.0/DO i = 1, 5sum = sum + array(i)END DOPRINT *, sumEND PROGRAM sum_array```上述代码中,我们使用`PROGRAM`关键字来定义一个Fortran程序。
matlabfastsim fortran_轮轨关系
matlabfastsim fortran_轮轨关系MATLAB中的fastsim工具箱是一个用于仿真和优化机电系统动态行为的工具箱。
在fastsim中,轮轨关系是一种重要的力学约束,用于模拟铁路车辆在行驶过程中的动力学行为。
以下是使用MATLAB fastsim进行轮轨关系仿真的一般步骤:1. 准备模型:首先,需要创建或导入一个描述轮轨关系的模型。
这个模型通常包括车辆、轨道、轮对以及相应的力学约束。
模型可以根据实际需求进行简化或复杂化。
2. 定义参数:在仿真过程中,需要定义一些参数,如车辆质量、轨道不平度、轮对弹性模量等。
这些参数可以根据实际情况进行调整。
3. 编写仿真函数:使用MATLAB fastsim工具箱,可以编写一个仿真函数来计算车辆在行驶过程中的动态响应。
这个函数通常包括以下几个部分:a. 初始化:设置初始条件,如车辆位置、速度等。
b. 迭代求解:使用数值积分方法(如四阶龙格库塔法)求解轮轨关系方程。
c. 更新:根据求解得到的车辆运动状态,更新其他部件的运动状态。
d. 输出:计算并输出感兴趣的性能指标,如车辆振动、轨道磨损等。
4. 运行仿真:使用MATLAB运行仿真函数,得到车辆在行驶过程中的动态响应。
5. 分析结果:分析仿真结果,提取有用的信息,如车辆振动特性、轨道磨损规律等。
这些信息可以用于评估车辆行驶性能、优化轮轨关系设计等。
需要注意的是,这里提供的仅是一般性的指导,具体实现时可能需要根据实际问题进行调整。
另外,MATLAB fastsim工具箱还有许多其他功能,如优化算法、可视化等,可以进一步扩展轮轨关系仿真的应用范围。
FORTRAN调用MATLAB画图
注意:在64位的机器里可能要将 engOpen,mxCreateDoubleMatrix,mx GetPr这些返回指针的函数以及ep,T 这些指针声明成integer*8
FORTRAN调用MATLAB画图
308工作室荣誉出品 308工作室荣誉出品
Version1.0 07/10/08
调用MATLAB引擎的常用函数 引擎的常用函数 调用
engOpen 打开matlab引擎 engClose 关闭matlab引擎 mxCreateDoubleMatrix 创建双精度数组 mxCopyReal8ToPtr 给新创建的数组赋值 mxGetPr 返回数组的实部 engPutVariable 将新创建数组植入matlab引擎 engEvalString 向matlab传达命令 engGetVariable 返回matlab中某数组的指针 mxCopyPtrToReal8 得到matlab中某数组的值
fortran调用matlab画图308工作室荣誉出品version10071008engopen打开matlab引擎engclose关闭matlab引擎mxcreatedoublematrix创建双精度数组mxcopyreal8toptr给新创建的数组赋值mxgetpr返回数组的实部engputvariable将新创建数组植入matlab引擎engevalstring向matlab传达命令enggetvariable返回matlab中某数组的指针mxcopyptrtoreal8得到matlab中某数组的值matlab注意
matlab调用fortran
科学计算中如果需要同时用到fortran和matlab,通常为在MATLAB中调用Fortran。
由于compact fortran和powerstation等编译器在win环境下陆续无法兼容,目前一般使用visual studio(vs)加intel visual fortran(ivf)的组合编译环境。
网上讲解调用方法语焉不详,以下是我自己探索的方式。
1.版本选择64Win7环境下,可行的一种搭配是visual studio 2012+ivf2013xe+matlab2013a,似乎可以将vs和ivf同时降2年,matlab如使用matlab2012等可能需要修改环境路径,百度。
Win8环境中则不可以使用vs2010(我尚未成功过0_0)。
2.安装次序先安装vs,再安装ivf,建议最后安装matlab。
如果没有其他需求,vs可以不安装除c++之外的可选功能,matlab也可以自选。
3.调用过程a)首先,通过开始栏的ivf来打开matlab,即:开始,intel parallel studio xe2013,command prompt,parallel ……XE,打开窗口命令,输入matlabb)Matlab中输入mex –setup,注意有空格。
给出编译器选择Please choose yourcompiler for building external interface (MEX) files: Would you like mex to locateinstalled compilers [y]/n?选择n,然后可以自选配置,如Select a compiler:[1] Borland C++Builder version 6.0[2] Borland C++Builder version 5.0[3] Borland C++Builder version 4.0[4] Borland C++Builder version 3.0……这里输入数字,选择ivf2013(with visual C++ 2012 linker)c)弹出如下选择:Your machine has a Digital Visual Fortran compiler located atC:\Program Files\……. Do you want to use this compiler [y]/n?选择n自行找到位置,方法是打开开始,intel parallel studio xe 2013,intelcompiler xe,using VS2012,右键之,打开文件位置,复制即得到地址。
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与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计算引擎实现。
在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程序的混合编程研究
址, 读取相应内容。当使用库函数 ./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与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。
fortran调用matlab
Fortran调用matlab,在这里实现,是通过系统调用了matlab程序,matlab程序运行了一个model模块。
具体示例操作如下:说明:实例用的是CVF+matlab7.1 不过相信都是一样的,因为代码跟编译器无关。
该实例来自网络,程序内容是用fortran自动生成一个随机矩阵,然后将矩阵的转置写入一个txt文件,然后用系统调用matlab程序,读取文件,求特征值,然后对特征值进行某变化后作图。
更多关于matlab读取已有文件的知识可以找相关书籍参考。
1、Fortran中编写代码:program main implicit noneinteger,parameter :: rows=100, cols=100 real*8 :: M(rows,cols) integer :: icall random_seed() call random_number(M) open(100,file='matrix M.txt')write(100,'(<cols>E25.15)') transpose(M) close(100)call system("matlab -r test") end program main2、Matlab建立一个test.m 文件,注意后缀,是model文件,编写为:clear all; close all; clc; M=load('matrix M.txt'); eigvalues=eig(M);plot(real(eigvalues),imag(eigvalues),'-r*'); title('矩阵M的特征值'); xlabel('特征值实数部分'); ylabel('特征值虚数部分');3、注意,test.m文件要放在编译完成的Fortran文件的工程文件夹下。
MATLAB与FORTRAN混合编程接口程序技术的研究
电脑知识与技术研究开发电脑知识与技术1引言使用过FORTRAN等高级程序语言进行算法开发研究的读者可能都已经知道,虽然用户使用这些高级编程语言不再需要直接对计算机硬件进行操作,但是在进行大量数组、矩阵运算程序编写时,可能编写的代码冗长,而且出错不易查找调试,这是因为这些语言本身并不包含矩阵类型的数据结构,这里主要是只语言本身,而不是指针对这些高级程序设计语言开发的增强包、升级包等。
但是现在国际上流行的许多大型软件都是基于FORTRAN、C、C++这些语言开发的,因此在这些领域仍然有着不可替代的地位。
MATLAB(MatrixLaboratory)语言是一种以矩阵(matrix)和阵列(array)为基本编程单元的,拥有完整的控制语句、数据结构、函数编写与调用格式等具有面向对象程序设计特征的高级程序设计语言。
读者不但可以利用它方便快捷地完成小规模的算法验证、程序开发和调试工作,而且可以便用它进行大规模的复杂应用程序设计,非常有效。
由于这几种高级程序设计语言的特点,譬如,如果把MAT-LAB与FORTRAN相结合起来混合编程,就可以弥补互相之间的不足,而且在实际开发过程中,可以大量调用已经编写好的FOR-TRAN程序和MATLAB强大的矩阵计算与绘图功能,这样我们就可以提高实际编程开发的效率。
为了调用已经大量存在的FORTRAN程序,以及MATLAB大量的内部函数等,MATLAB提供了一个API(ApplicationProgramInterface),用于与外部数据交换的借口。
但是这里面临一个问题,由于这二种编程语言数据存储格式不同,故不可以直接通讯,因此要使用一个接口程序。
2接口程序面临的问题以及解决办法由于FOTRAN的数据存储格式与MATLAB的不同,因此需要利用MATLAB中的API接口程序,把MATLAB中的矩阵类型转换为FORTRAN程序可以使用的双精度变量,然后把FOR-TRAN的运行结果转换为MATLAB可以使用的矩阵类型输出,这里MATLAB使用指针这个功能使二种数据格式进行转换的,因为MATLABAPI是以一种特殊的数据类型mxArray结构体来工作的,在FORTRAN中没有这样的一种数据类型,所以MATLAB使用了指针来与FORTRAN程序交换数据。
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