xlily 发表于 2008-10-17 15:30

matlab 和compaq visual fortran6.5混合编程问题

matlab怎样调用fortran程序啊?或者fortran怎样调用matlab程序?我想在matlab中运行mex-setup,但是下面没有列出fortran编译器啊。多谢各位指点啊,最好具体点。

科技在线 发表于 2008-10-17 18:40

利用Mex 接口函数生成可以被Matlab 识别的Fortran-Mex 文件
  所谓Mex 接口函数,实际是一种动态链接的子程序,同Matlab的内置函数一样,能被Matlab 的解释器自动装入、运行。Matlab中Mex文件的扩展名可以为.Mex或.DLL,它是由Fortran经过编译生成的Matlab动态链接子程序,需要强调的是Fortran下Mex文件的数据类型只能是双精度型(Double Precision),不像C语言那样,有Matlab支持的数据类型。
  通常一个典型的Fortran-Mex 文件由两部分组成,一个就是包含你要实现的计算功能的子例行程序(不能是函数),该子例行程序实际上就是纯Fortran环境下编写的源程序,而另一个同时也是最主要的部分就是入口程序,该入口程序负责Matlab与Fortran语言之间的数据输入与输出,也即可以在Matlab的环境下输入变量,通过该接口程序传给Fortran进行运算,运算结果赋给输出变量,然后通过该接口程序,返回到Matlab进行输出,这样就完成了Matlab对Fortran函数的调用,典型的调用过程可见图1。
  能够实现接口程序的函数是MexFunction,它由四个参数prhs, nrhs, plhs, nlhs 构成,这里:
    prhs―输入变量的阵列;nrhs―输入变量的个数;
    plhs―输出变量的阵列;nlhs―输出变量的个数;
以已经编译通过的一段Fortran-Mex程序为例,说明为了实现Matlab对Fortran函数的直接调用,需要在Fortran程序的基础上附加的入口程序,该程序用来已知溴化锂水溶液的温度,浓度求焓值,具体程序参见附录。
3) Fortran 编译器(complier)的设置
  在安装了Compaq Fortran version 6.x,Digital Fortran version 5.x,或Fortran powerstation 4.0(或其他版本)的前提下,使用Mex?setup命令即可实现Fortran 编译器的设置。运行后,显示如下结果:
     >>Mex -sutup
    Select a compiler:
     Compaq Fortran version 6.5 in C:\Program Files\Microsoft Visual Studio
     Lcc C version 2.4 in C:\MATLAB6P1\sys\lcc
     Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
     None
   由于本机安装的Fortran版本是Compaq Fortran version 6.5选择,然后选择‘y’
确定项,就可完成Fortran默认编译器的设置。

科技在线 发表于 2008-10-17 18:42

http://co.163.com/neteaseivp/resource/paper/doc/20049301096521515032/image002.jpg

[ 本帖最后由 风花雪月 于 2008-10-28 17:19 编辑 ]

xlily 发表于 2008-10-19 20:16

非常感谢楼上的回答,但是我在matlab中使用mex -setup命令,结果中为什么没有fortran选择项啊?
mex -setup
Please choose your compiler for building external interface (MEX) files:

Would you like mex to locate installed compilers /n? y

Select a compiler:
Lcc C version 2.4.1 in D:\PROGRAM\MATLAB71\sys\lcc

None

Compiler:

xlily 发表于 2008-10-19 20:18

我装的是compaq fortran 6.5,与matlab装在同一盘下

风花雪月 发表于 2008-10-28 17:21

这是环境变量配置问题
有两种选择
(1)Matlab下编译
(假设matlab安装目录为 %matlab%)
    1.打开%matlab%\bin\win32\mexopts\df60engmatopts.bat
将13行中的 set DF_ROOT=%DF_ROOT %
改为set DF_ROOT =C:\Program Files\Microsoft Visual Studio (CVF安装目录)
    2.将matlab的工作目录改为你的fortran源代码存放的目录
    3.在matlab下运行 mex –f df60engmatopts.bat exsample.for
(假设源文件为exsample.for 其中有关于matlab引擎的操作)
(2)CVF下编译
   1.新建一个项目
   2.在tools->directory 里设置 include 和 lib目录
记住要包括以下目录
include ->C:\Program Files\Microsoft Visual Studio\DF98\Include
include->C:\Program Files\Microsoft Visual Studio\DF98\IMSL\Include
include->D:\MATLAB\EXTERN\INCLUDE
   
lib->D:\MATLAB\EXTERN\LIB\WIN32
lib->D:\MATLAB\EXTERN\LIB\WIN32\DIGITAL\DF60
lib->C:\Program Files\Microsoft Visual Studio\DF98\IMSL\Lib
lib->C:\Program Files\Microsoft Visual Studio\DF98\Lib
    3. 在project->setting->link->Object/library modules里添加libmx.lib libmat.
lib libeng.lib

xlily 发表于 2008-11-14 09:17

楼上说的对,是环境变量的问题,可能是我安装Fortran的时候没有进行环境变量的配置,我重装进行了配置就好了。谢谢两位的回答。
页: [1]
查看完整版本: matlab 和compaq visual fortran6.5混合编程问题